我已经看到this question期望Promise
可以工作。在我的情况下,将Error
放在Promise
之前和之外。
在这种情况下如何断言错误?我已经尝试过以下选项。
test('Method should throw Error', async () => {
let throwThis = async () => {
throw new Error();
};
await expect(throwThis).toThrow(Error);
await expect(throwThis).rejects.toThrow(Error);
});
答案 0 :(得分:3)
调用throwThis
返回一个Promise
,应以Error
拒绝,因此语法应为:
test('Method should throw Error', async () => {
let throwThis = async () => {
throw new Error();
};
await expect(throwThis()).rejects.toThrow(Error); // SUCCESS
});
请注意,toThrow
是针对PR 4884和only works in 21.3.0+中的承诺而固定的。
所以这仅在您使用Jest
22.0.0或更高版本的情况下有效。
如果您使用的是Jest
的早期版本,则可以将spy
传递给catch
:
test('Method should throw Error', async () => {
let throwThis = async () => {
throw new Error();
};
const spy = jest.fn();
await throwThis().catch(spy);
expect(spy).toHaveBeenCalled(); // SUCCESS
});
...,并可以选择检查抛出的by checking spy.mock.calls[0][0]
Error
。