考虑这个函数:
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
是我想要测试的东西。如果承诺总是解决,这个测试不应该通过。但它会的!这是因为promise的catch实际上捕获了expect
异常。
我的问题是:当expect
在承诺的then
处理程序中抛出错误时,如何不捕获承诺的catch
处理程序中的错误?
请注意,我没有使用async/await
您需要创建一个失败的承诺,并且需要在测试中返回该承诺。请看一下关于测试承诺的文件。
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');
})
})