考虑这个功能:
aPromise = require('axios');
function middleware(callback) {
axios.get('/api/get')
.then(callback)
.catch(callback);
}
考虑这个测试:
const callback = (err) => {
expect(isError(err)).toBe(true);
done();
};
middleware(callback);
isError
是一个lodash函数。
将aPromise
视为我想要测试的内容。如果承诺总是解决,那么这个测试不应该通过。但它会!那是因为承诺的捕获实际上捕获了expect
异常。
我的问题是:当catch
在promise的expect
处理程序中抛出错误时,如何在promise then
处理程序中捕获错误?
请注意,我不使用async / await。
答案 0 :(得分:0)
您需要创建失败的承诺,并且需要在测试中返回承诺。请查看doc on testing promises。
aPromise = require('axios');
jest.mock('axios', () => {
get: ()=> jest.fn() //initialy mock the get function
})
it('catch failing promises',() = > {
const result = Promise.reject('someError'); //create a rejected promises
aPromise.get.mockImplementation(() => result)// let `get` return the rejected promise
const callback = jest.fn()
middleware(callback)
return result
.then (()=>{
expect(callback).toHaveBeenCalledWith('someError');
})
})