Тестирование определенных свойств отклоненных обещаний с помощью Mocha и Chai-as-Promised

Я пытаюсь проверить особенности отклоненного промиса, используя Chai-as-Promised, Mocha и диалект "следует". Обещания реализуются с помощью bluebird.

Это отлично работает:

it('it should be rejected when given bad credentials', function () {

   var promiseOfUsers = db.auth("bad", "credentials").getUsers();
   return promiseOfUsers.should.eventually.be.rejectedWith(Error)

});

У этой ошибки есть свойство «статус». Я хотел бы утверждать, что статус 401

Это не работает:

it('it should be rejected when given bad credentials', function () {

   var promiseOfUsers = db.auth("bad", "credentials").getUsers();
   return promiseOfUsers.should.eventually.be.rejectedWith(Error)
       .that.has.property('status')
       .that.equals(401)

});

Кажется, что любая попытка утверждения без ссылки на «отклонено» или rejectWith(Error) терпит неудачу и просто выводит ошибку на консоль.

Как я могу выяснить причину отказа?


person toddgeist    schedule 02.06.2014    source источник
comment
Попробуйте should.eventually.be.rejectedWith(Error).and.eventually.have.property("status").that.equals(401)   -  person Benjamin Gruenbaum    schedule 02.06.2014
comment
спасибо, но это не помогло. Я обновлю вопрос, чтобы показать результат.   -  person toddgeist    schedule 02.06.2014
comment
Хммм .should.eventually.be.rejected.and.eventually.have.property("status").that.equals(401); работает, но не проверяет тип ошибки. jsfiddle.net/F9SKD   -  person Benjamin Gruenbaum    schedule 02.06.2014
comment
Мех. Лично я бы просто сделал .catch(function(err){ return err instanceof Error && error.status === 401});   -  person Benjamin Gruenbaum    schedule 02.06.2014
comment
это работает с незначительным исправлением error.status должен быть err.status   -  person toddgeist    schedule 02.06.2014
comment
Итак, если я правильно понимаю, нет никакого чайного решения для одновременной проверки ошибки и статуса?   -  person Guid    schedule 31.03.2015
comment
Моя проблема немного отличается, мне нужно проверить настраиваемое поле (код) ошибки отклонения И сообщение тоже.. и я не знаю, как это сделать с chai...   -  person Guid    schedule 31.03.2015


Ответы (2)


Я думаю, что у обработчика rejectWith() есть некоторые проблемы. Но вы можете сделать так:

promiseOfUsers.should.be.rejected.and.eventually.have.property("status",401)

person sertug    schedule 09.02.2015
comment
У него есть проблемы (v.5.3.0), см. Pull Request 123 и запрос на включение 131. return Promise.reject(2).should.be.rejectedWith(1); проходит, когда не должно... - person James Lawson; 04.07.2016
comment
Ах... добавление eventually во второй бит цепочки - это то, чего мне не хватало. Спасибо! Так что это сработало для меня, и это тот шаблон, который я пытался заставить работать: promiseOfUsers.should.be.rejected.and.eventually.have.status(401). (С http://chaijs.com/plugins/chai-http/.) - person Mark Birbeck; 05.07.2017

Если вы хотите проверить, было ли отклонено ваше обещание, и проверить полученный объект (также известный как причина):

return fooPromise.should.be.rejected.and.eventually.deep.equal({
   'x': 1,
   'y': 1,
   'z': 2
})

Вы можете изменить deep.equal на любой из обычных других chai сопоставителей.

Примечание. Это расширение ответа @sertug, и мы надеемся, что оно будет полезно для тех, кто ищет это.

person James Lawson    schedule 06.05.2016