如何使捕获的承诺在开玩笑中失败

时间:2016-11-03 12:52:58

标签: javascript jasmine jestjs

考虑这个功能:

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。

1 个答案:

答案 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');
        })

})