13

我正在尝试使用Chai-as-PromisedMocha和“应该”方言来测试被拒绝的 Promise 的细节。Promise 由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)

});

似乎在不引用“rejected”或rejectedWith(Error) 的情况下进行断言的任何尝试都会失败,并且只会将错误打印到控制台。

如何深入了解拒绝的原因?

4

2 回答 2

11

我认为 deniedWith() 处理程序有一些问题。但你可以这样做:

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

于 2015-02-09T09:43:13.863 回答
8

如果您想检查您的承诺是否被拒绝并检查结果对象(也就是原因)

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

您可以更改deep.equal为任何通常的其他chai 匹配器

注意:这是@sertug 答案的扩展,希望对来这里寻找这个答案的其他人有用。

于 2016-05-06T12:10:30.130 回答