我正在使用Coffeescript,摩卡咖啡和chai,并且具有以下代码:
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
答案 0 :(得分:1)
Chai-as-promise的rejectedWith()
断言在某种程度上类似于chai的throw()
; throw()
仅进行严格的===
比较。当然,您的错误是两个完全不同的对象,因此不是严格相等的。
在这种情况下,我们使用deep
比较。但是chai不支持deep
的罚球相等性,因此我们不能简单地说:
Foo.bar().should.eventually.be.deep.rejectedWith(Herp(message));
当然rejected
匹配器是可链接的,因此类似以下的内容应该起作用:
Foo.bar().should.eventually.be.rejected.and.deep.equal(Herp(message));