由于某種原因,我無法測驗拒絕。這是函式,我想 100% 測驗它。現在就像 92% 并抱怨拒絕(e)沒有經過測驗..
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);
}
});
}
更新:
我必須制作另一個 Mock 以使 catch 陳述句首先發生。而 TestBed.overrideProvider 對我來說并不真正有效,所以我必須
it('should return a rejected promise', async() => {
TestBed.resetTestingModule();
TestBed.configureTestingModule({
//inserting the new mock provider to trigger the catch
...
});
然后使用下面的答案(謝謝@Apoorva Chikara)并為我作業
如果有更簡單的方法來實作這一點,請告訴我
uj5u.com熱心網友回復:
您可以捕獲錯誤并對其進行測驗。它類似于測驗決議。
describe('Test Case', () => {
describe('Testing Sample 1', () => {
it('should return a rejected promise', () => {
service.resolve()
.catch((error) => {
expect(error).toEqual('the error string');
});
});
});
});
uj5u.com熱心網友回復:
永遠不要將 anasync function作為執行人傳遞給new Promise!您的功能應該簡化為
public async resolve(): Promise<{ [key: string]: boolean }> {
// ^^^^^
for await (const setting of settings) {
// ObjectStore that acts like hashMap
this.store.set(setting.key, setting.value);
}
}
然后您將不需要對甚至不存在的代碼路徑進行單獨的測驗。此外,您可能不想使用for await,除非settings是異步生成器。
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/334769.html
標籤:javascript 有角的 单元测试 玩笑 业力茉莉
