UnhandledPromiseRejectionWarning при сбое теста - PullRequest
0 голосов
/ 26 декабря 2018

У меня есть несколько тестов mocha / chai / chai-http, которые следуют приведенной ниже структуре, однако всякий раз, когда один тест не проходит, я получаю UnhandledPromiseRejectionWarning, который, похоже, не может определить его источник.

UnhandledPromiseRejectionWarning: необработанное отклонение обещания.Эта ошибка возникла либо в результате выброса внутри асинхронной функции без блока catch, либо в результате отклонения обещания, которое не было обработано с помощью .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 голосов
/ 26 декабря 2018

Использование обратного вызова done вместе с обещаниями является антипаттерном.Обещания поддерживаются современными системами тестирования, в том числе 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({})
        })
    })
})
0 голосов
/ 26 декабря 2018

Я исправил это, добавив .catch(err => done(err))

...