chai-as-promised - похоже, не работает с промисами bluebird

Я пытаюсь протестировать фрагмент кода, который я написал с промисами bluebird, используя chai-as-promised.

Мой тестируемый метод возвращает отказ от обещания следующим образом:

  /**
   * Creates a new user entry in the database.
   * @param {JSONObject} userData -- User details for creation.
   * @return => {boolean} true if succefully created, false otherwise.
   **/
  createUser: function(userData) {
    return Promise.reject();
  },

Код тестирования такой:

    describe('User creation test suite', function() {
        it('Should successfully create root user', function(done) {
            expect(users.createUser(sampleUsers.raam))
                .to.eventually.have.property('id').and.notify(done);
          //expect(Promise.resolve({foo:'bar'})).to.eventually.have.property('id').and.notify(done);
        });

Несмотря на то, что метод намеренно терпит неудачу, тесткейс помечается как пройденный. Вот результат.

Набор тестов для создания пользователей

  ✓ Should successfully create root user

Если я проверю напрямую жестко закодированную строку, например

expect(Promise.resolve({foo:'bar'})).to.eventually.have.property('id').and.notify(done);

Тогда вроде работает. Что я здесь делаю неправильно?

EDIT Я обнаружил, что это не имеет ничего общего с обещаниями bluebird или моим методом, который находится на стадии тестирования. Простое жестко запрограммированное отклонение также работает некорректно. То есть...,

expect(Promise.reject({foo:'bar'})).to.eventually.have.property('id').and.notify(done)

возвращается как переданное, а не с ошибкой. Я делаю что-то ужасно неправильно здесь?


person Mopparthy Ravindranath    schedule 22.03.2016    source источник
comment
Я использую следующую версию chai utils: devDependencies: {chai: ^3.5.0, chai-as-promised: ^5.2.0, chai-http: ^2.0.1},   -  person Mopparthy Ravindranath    schedule 22.03.2016
comment
После еще нескольких копаний я понимаю, что звоню без ошибок. Как мне сообщить выполненному обратному вызову, что обещание было отклонено.   -  person Mopparthy Ravindranath    schedule 22.03.2016


Ответы (1)


Вызов передачи обратного вызова в ваш тест Mocha, а затем вызов его после завершения выполнения — как вы делаете с обратным вызовом done — это всего лишь один из способов справиться с асинхронный код в Mocha. Другой способ — просто вернуть обещание из вашего теста, которое вы можете получить от chai-as-promised. Попробуйте изменить свой тест следующим образом:

it('Should successfully create root user', function() {
    return expect(users.createUser(sampleUsers.raam)).to.eventually.have.property('id');
});
person Nathan Thompson    schedule 11.10.2016