我正在尝试测试ReactJs组件,其中的一个组件具有一种可以获取数据的方法,而其中的获取具有应有的承诺。因此,我尝试创建一个模拟文件:
const apiFetch = {
value() {
return 42
},
}
module.exports = apiFetch
然后:
const spy = jest.spyOn(apiFetch, 'value')
const isValue = apiFetch.value()
expect(spy).toHaveBeenCalled()
expect(isValue).toBe(42)
测试通过,但是此警告仍在显示。
我又添加了一件事:
process.on('UnhandledPromiseRejectionWarning', (e) => { throw e })
UnhandledPromiseRejectionWarning:未处理的承诺拒绝。这个 由抛出异步函数引起的错误 没有障碍,或者拒绝了没有处理的承诺 使用.catch()。 (拒绝ID:188)
答案 0 :(得分:4)
在运行异步测试时,请记住,完成测试时需要指出测试方法。
开玩笑,您可以执行以下操作:
apiFetch.js
const apiFetch = {
value() {
return Promise.resolve(42);
},
}
module.exports = apiFetch
apiFetch.test.js:
const apiFetch = require('./apiFetch');
test('the data is peanut butter', done => {
apiFetch.value().then(data => {
expect(data).toBe(42);
done();
})
});
done是一个插入的函数参数(由jest框架提供),在调用时表示测试方法的结束。
如果您在不使用jest(或mocha)的异步功能的情况下测试异步逻辑,那么即使异步承诺失败,测试也会通过
修改
每个框架都有希望的支持。开玩笑吧,就像
it('works with resolves', () => {
expect.assertions(1);
return expect(apiFetch.value()).resolves.toEqual(42);
});
使用纯回调时,请使用已完成的操作。
当使用诺言时,您可以使用注入的“完成”功能,但是如果诺言失败并且未调用“完成”,则测试将在超时时失败。最好在测试承诺逻辑时建议使用'it','expect'和'resolve'。