使用Mocha和chai -as- committed测试被拒绝承诺的特定属性

Testing for specific properties of rejected promises, with Mocha and Chai-as-Promised

本文关键字:承诺 拒绝 属性 测试 Mocha chai -as- committed 使用      更新时间:2023-09-26

我正在尝试使用Chai-as-Promised、Mocha和"should"方言来测试被拒绝的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)
});

错误有一个"status"属性。我想断言状态是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)的断言尝试都会失败,并且只是将错误打印到控制台。

我该如何探究被拒的原因?

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

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

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

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

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

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