按照承诺测试拒绝与拒绝
问题描述:
我想测试一个函数返回一个承诺。按照承诺测试拒绝与拒绝
在此特定试验中,承诺预计与含有经典message
字段Error对象被拒绝(在该测试中,它预计相当于"my error message"
)和一个自定义字段我添加命名code
,它是一个字符串(比如“EACCESS”,“ERIGHT”等,在这个测试中预计等于"EFOO"
)
我想使用chai-as-promised。
return expect(foo()).to.eventually.be.rejectedWith("my error message");
这种说法是工作,但现在我想测试code
场了。
如何做到这一点?
答
如果你使用Chai-As-Promised(因为你说你是),那么它允许链接关闭的rejectedWith
- 它套,环断言对象是错误对象 - rejectedWith()
后意味着什么现在要断言上错误。这让你做很酷的事情,如:
return expect(foo()).to.eventually
.be.rejectedWith("my error message")
.and.be.an.instanceOf(Error)
.and.have.property('code', 'EFOO');
一些柴方法也链条,所以你可以用它来做出有关该错误的一些相当深嵌套断言:
return expect(foo()).to.eventually
.be.rejectedWith("my error message")
.and.have.property('stack')
.that.includes('myfile.js:30')
答
有5.1版。 ChaiAsPromised,从Keithamus解决方案并没有为我工作的0 - rejectedWith并没有给我的错误对象断言,但“拒绝”做的:
return expect(foo())
.to.be.rejected
.and.be.an.instanceOf(Error)
.and.have.property('code', 'EFOO');
对于断言多个属性
return expect(foo())
.to.be.rejected
.then(function(error) {
expect(error).to.have.property('name', 'my error message');
expect(error).to.have.property('code', 'EFOO');
});
重复为[测试用于被拒绝的承诺的特定属性(http://stackoverflow.com/questions/23985949/testing-for-specific-properties-of-rejected-promises-with-mocha-and- chai-as-pro) – 2015-03-31 08:43:53