[英]Testing a promise reject code path with jest
我有一種情況,當 promise 拒絕時,我正在嘗試測試代碼路徑。 設置相對復雜,但我已將其簡化為最小可重現示例:
let resolver;
let rejecter;
const p = new Promise((resolve, reject) => {
resolver = resolve;
rejecter = reject;
});
const f = jest.fn((x) => {
console.log(x);
});
const run = () => {
return p
.then(() => {
f("resolved");
})
.catch(() => {
f("rejected");
});
};
beforeEach(() => {
f.mockClear();
});
// this test passes
test("it should call with resolved when p resolves", async () => {
run();
resolver();
await p;
expect(f).toHaveBeenCalledWith("resolved");
});
// this test fails
test("it should call with rejected when p rejects", async () => {
run();
rejecter();
await p;
expect(f).toHaveBeenCalledWith("rejected");
});
我的問題是,盡管f
確實被稱為"rejected"
,但測試失敗了,原因是
thrown: undefined
我在這一點上的猜測是,這與 promise 拒絕的事實有關。 我曾希望這不會是一個問題,因為它被抓住了。 我怎樣才能成功完成這個測試?
我通過在 promise p
上添加一個catch
來解決這個問題:
// this test fails
test("it should call with rejected when p rejects", async () => {
run();
rejecter();
await p.catch(() => {});
expect(f).toHaveBeenCalledWith("rejected");
});
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.