В чем разница между вызовом 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 устанавливает таймер и ожидает завершения выполнения цепочки обещаний.

Второй подход является правильным, так как вам может потребоваться проверить цепочки обещаний.

Взгляните на этот учебник, в котором я познакомился с асинхронным модульным тестированием.

Другие вопросы по тегам