В чем разница между вызовом chai-as-обещано с или без метода уведомления?
Я использую chai
а также chai-as-promised
проверить некоторый асинхронный код JS.
Я просто хочу проверить, что функция, возвращающая обещание, в конечном итоге вернет массив, и написал 2 следующих теста:
A:
it('should return an array', () => {
foo.bar().should.eventually.to.be.a('array')
})
B:
it('should return an array', (done) => {
foo.bar().should.eventually.to.be.a('array').notify(done)
})
Оба проходят нормально, но только опция B фактически запускает полный код, включенный в мою функцию bar() (т.е. отображает console.log()
сообщение из кода ниже). Я делаю что-то неправильно? Почему это так?
bar() {
return myPromise()
.then((result) => {
console.log('Doing stuff')
return result.body.Data
})
.catch((e) => {
console.err(e)
})
}
2 ответа
Какую тестовую библиотеку вы используете? Мокко, стажер или другой? Для Mocha и Intern вы должны вернуть обещание из вашего метода тестирования:
it('should return an array', () => {
return foo.bar().should.eventually.to.be.a('array');
})
Тестирование обещания означает, что вы тестируете асинхронный код. Обратный вызов Notify and done устанавливает таймер и ожидает завершения выполнения цепочки обещаний.
Второй подход является правильным, так как вам может потребоваться проверить цепочки обещаний.
Взгляните на этот учебник, в котором я познакомился с асинхронным модульным тестированием.