【问题标题】:Testing for specific properties of rejected promises, with Mocha and Chai-as-Promised使用 Mocha 和 Chai-as-Promised 测试被拒绝的 Promise 的特定属性
【发布时间】:2014-07-22 01:32:28
【问题描述】:

我正在尝试使用Chai-as-Promised、Mocha 和“应该”方言来测试被拒绝的 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) 的断言尝试都会失败,并且只会将错误打印到控制台。

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

【问题讨论】:

  • 试试should.eventually.be.rejectedWith(Error).and.eventually.have.property("status").that.equals(401)
  • 谢谢,但这并没有帮助。我将更新问题以显示结果。
  • 嗯 .should.eventually.be.rejected.and.eventually.have.property("status").that.equals(401); 有效,但不检查错误类型。 jsfiddle.net/F9SKD
  • 嗯。我个人只会做.catch(function(err){ return err instanceof Error && error.status === 401});
  • 与小修正“error.status”一起工作的应该是“err.status”

标签: javascript testing promise mocha.js chai


【解决方案1】:

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

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

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

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

【讨论】:

    【解决方案2】:

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

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

    【讨论】:

    • 它确实有问题 (v.5.3.0) 请参阅 Pull Request 123 和 Pull Request 131。 return Promise.reject(2).should.be.rejectedWith(1); 在不应该的时候通过...
    • 啊...在第二个链接中添加eventually 是我所缺少的。谢谢!所以这对我有用,这就是我试图开始工作的模式:promiseOfUsers.should.be.rejected.and.eventually.have.status(401)。 (与chai-http。)
    猜你喜欢
    • 2016-10-05
    • 1970-01-01
    • 1970-01-01
    • 2015-06-02
    • 1970-01-01
    • 2019-07-18
    • 1970-01-01
    • 1970-01-01
    • 2018-06-01
    相关资源
    最近更新 更多