I cannot test the reject for some reason. Here is the function and I want to test it 100%. now it is like 92% and complain about reject(e) is not tested..
public resolve(): Promise<{ [key: string]: boolean }> {
return new Promise<{ [key: string]: boolean }>(async (resolve, reject) => {
try {
for await (const setting of settings) {
// ObjectStore that acts like hashMap
this.store.set(setting.key, setting.value);
}
resolve();
}
catch (e) {
reject(e);
}
});
}
Updates:
I have to make another Mock to make the catch statement happening first. And TestBed.overrideProvider is not really working for me, so that I have to
it('should return a rejected promise', async() => {
TestBed.resetTestingModule();
TestBed.configureTestingModule({
//inserting the new mock provider to trigger the catch
...
});
and then use the answer below (Thank you @Apoorva Chikara) and works for me
If there is easier way to accomplish this, please let me know
Here is my updated code for testing.
it('should return a rejected promise', async() => {
TestBed.resetTestingModule();
TestBed.configureTestingModule({
providers: [
{
provide: ObjectStore,
useValue: new ObjectStore('test'),
},
{
// Making this client invalid to trigger catch and throw error
// I think writing a mock class to throw error also can be done
// this is the "settings" from azure listConfigurationSettings
provide: AppConfigurationClient,
useValue: {},
}
]
});
service = TestBed.inject(FeatureFlagResolver);
store = TestBed.inject(ObjectStore);
const rejection = async () => {
await service.resolve().catch();
}
await expect(rejection()).rejects.toThrow();
});
The "settings" is listConfigurationSettings from MS azure. we used to read from azure for configuration settings. For example, we want to enable certain thing(s) in the Angular site, we can go to azure portal to change app-setting ("chatbot", 'on'), so that the chatbot will be on the page.. Just app settings that people to toggle on, off for now.
Sorry I should have included more information in the first place.