如何用should.js做一个deepEqual断言?

我试图用should.js(最新版本)做一个deepEqual断言,并没有任何成功。 我可以让事情equal而不是与deepEqual一起deepEqual 。 事实上,我看到没有deepEqual方法。

以下是我所尝试的:

 > require('should') {...} > > var x = Number(8) undefined > x.should.equal(8) { obj: 8 } > x.should.equal(9) AssertionError: expected 8 to equal 9 at .... > x.should.deepEqual(8) TypeError: Object #<Object> has no method 'deepEqual' 

很公平。 现在看着should ,我看到它是一个getter:

 > Object.getOwnPropertyDescriptor(Object.prototype, 'should') { get: [Function], set: [Function], enumerable: false, configurable: true } 

既然是吸气,那我该如何检查它的钥匙呢? 这几乎可以工作:

 > Object.keys(Object.prototype.should) [ 'obj' ] 

但是,我明白了

 > Object.getOwnPropertyDescriptor(should.obj) { value: undefined, writable: false, enumerable: false, configurable: false } 

所以我现在很困难 我只想看看有什么事情可以遵循。

没有 阅读文档 ,它说, should.js从字面上扩展了节点的断言模块,但节点的断言确实允许deepEqual

 > assert = require('assert') > assert.deepEqual [Function: deepEqual] 

应该docs甚至不提deepEqual在所有,这真的让我感到困惑。 为了使事情变得更加混乱,当我在节点REPL上input时,我确实看到了一个deepEqual 。 但据我所知,它被埋在一个ok元素中。

TL; DR:如何从should调用assertEqual或其等价物?

我认为你应该(双关语意)使用eql方法。

https://github.com/visionmedia/should.js/#eql

 ({ foo: 'bar' }).should.eql({ foo: 'bar' })