使用 Mocha 和 Chai-as-Promised 测试被拒绝的 Promise 的特定属性
Posted
技术标签:
【中文标题】使用 Mocha 和 Chai-as-Promised 测试被拒绝的 Promise 的特定属性【英文标题】:Testing for specific properties of rejected promises, with Mocha and Chai-as-Promised 【发布时间】: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”
【参考方案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。)以上是关于使用 Mocha 和 Chai-as-Promised 测试被拒绝的 Promise 的特定属性的主要内容,如果未能解决你的问题,请参考以下文章
Mocha 测试不与 Webpack 和 mocha-loader 一起运行
您如何安装和运行 Mocha,Node.js 测试模块?安装后获取“mocha:找不到命令”