Javascript 为什么';我的柴不是拒绝了我的工作吗?
我正在使用Coffeescript、Mocha和chai,我有以下代码:Javascript 为什么';我的柴不是拒绝了我的工作吗?,javascript,testing,mocha.js,chai,Javascript,Testing,Mocha.js,Chai,我正在使用Coffeescript、Mocha和chai,我有以下代码: class Herp extends Error message = "derpy!" class Foo @bar: -> new Promise(() => throw Herp(message) ) describe 'Berp', -> it 'should herp a derp', -> Foo.
class Herp extends Error
message = "derpy!"
class Foo
@bar: ->
new Promise(() =>
throw Herp(message)
)
describe 'Berp', ->
it 'should herp a derp', ->
Foo.bar().should.eventually.be.rejectedWith(Herp(message))
我不明白为什么,当我运行此测试时,它会告诉我:
AssertionError: expected promise to be rejected with [Error: derpy!] but it was rejected with [Error: derpy!]
因为这条消息看起来很像是在说,它期望它被拒绝,而它被拒绝的正是它被拒绝的东西。我做错了什么
❯ grep chai package.json
"chai": "^3.5.0",
"chai-as-promised": "^5.3.0",
❯ node --version
v6.4.0
❯ npm --version
3.10.3
Chai as promised的
rejectedWith()
断言与Chai的throw()
有些相似;而throw()
只进行严格的=
比较。当然,你们的错误是两个完全不同的对象,所以严格来说并不相等
在这种情况下,我们使用deep
比较。但是chai不支持在投掷上的deep
equality,因此我们不能简单地说:
Foo.bar().should.eventually.be.deep.rejectedWith(Herp(message));
当然,rejected
matcher是可链接的,因此类似于以下的东西应该可以工作:
Foo.bar().should.eventually.be.rejected.and.deep.equal(Herp(message));
另请参见:和,了解其他可能的解决方案和问题跟踪