使用Nock或httpMock在catch块中测试异步代码

时间:2018-10-02 03:53:44

标签: javascript node.js chai nock http-mock

我发出一个axios请求,该请求失败并在catch块中引发错误。 在catch块中,我向其他端点发出请求以获取结果

router.get('/info', (req, res) => {
  axios('www.getInformationApi.com')
    .then(results => {
      return res.status(200).json(results.data);
    })
    .catch(async(err) => {

      if (err === 'server_down') {
        try {
          // need to improve test coverage for this lines
          const secondsResults = await axios('www.getInformationApi2.com');
          return res.status(200).json(secondsResults)
        } catch (error) {
          throw Error(error)
        }
      } else {
        const error = errors.createEntError(err.message, errorList);
        return res.status(constants.HTTP_SERVER_ERROR).json(error);
      }


    })

});

我喜欢使用“ nock”或“ http-mocks”在catch块中编写涵盖“ Axios”请求的单元测试

在这种情况下我可以使用单元测试进行测试还是需要运行集成测试

1 个答案:

答案 0 :(得分:0)

根据关于good unit test的回答,有一条声明:

  

不要测试您不拥有的代码

因此,如果您使用的是nockhttp-mocks,则测试也将依赖于axios库。因为如果axios有错误-您的测试可能会显示出来。因此,从我的角度来看,更正确地将其标记为集成测试。

好的单元测试应该是独立的,其结果是-axios库应该是stubbed,具有您要测试的行为,即:

sinon.stub(axios, 'get').rejects('server_down')