测试失败时发出UnhandledPromiseRejectionWarning

时间:2018-12-26 15:08:38

标签: node.js mocha chai chai-http

我有一些遵循以下结构的mocha / chai / chai-http测试,但是,每一项测试失败,我都会得到UnhandledPromiseRejectionWarning,但似乎无法弄清其来源。

  

UnhandledPromiseRejectionWarning:未处理的承诺拒绝。这个   由抛出异步函数引起的错误   没有障碍,或者拒绝了没有处理的承诺   .catch()。

describe('indexData', () =>{
    it('Should return status code 200 and body on valid request', done => {
        chai.request(app).get('/api/feed/indexData')
            .query({
            topN: 30,
            count: _.random(1, 3),
            frequency: 'day'
        })
            .set('Authorization', token).then(response => {
            // purposefully changed this to 300 so the test fails
            expect(response.statusCode).to.equal(300)
            expect(response.body).to.not.eql({})
            done()
        })
    })
})

我尝试在.catch(err => Promise.reject(err)之后添加一个.then(),但是它也不起作用。我在这里可以做什么?

2 个答案:

答案 0 :(得分:0)

我通过添加.catch(err => done(err))

来解决此问题

答案 1 :(得分:0)

done回调与promises一起使用是一种反模式。承诺由现代测试框架(包括Mocha)支持。测试应返回承诺:

it('Should return status code 200 and body on valid request', () => {
      return chai.request(app).get('/api/feed/indexData')
        .query({
          topN: 30,
          count: _.random(1, 3),
          frequency: 'day'
        })
        .set('Authorization', token).then(response => {
          // purposefully changed this to 300 so the test fails
          expect(response.statusCode).to.equal(300)
          expect(response.body).to.not.eql({})
        })
    })
})