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

问题描述:

我试图用should.js(最新版本)做一个deepEqual断言,并没有取得任何成功。我可以使用equal而不是deepEqual。事实上,我看到没有deepEqual方法。如何用should.js做一个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 } 

既然是一个getter,如何我检查它的钥匙?这几乎工程:

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

但后来我看到

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

所以我宁愿停留在这一点上。我只想看看什么东西可以遵循should

read the docs和它说,should.js字面上扩展节点的断言模块,但节点的断言确实允许deepEqual

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

应该docs甚至没有提到deepEqual在所有,这真的让我感到困惑。为了让事情更加令人困惑,当我在节点REPL上输入should时,我做了看到一个deepEqual。据我所知,它被埋在了一个ok元素中。

TL; DR:我如何拨打assertEqual或同等电话should

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

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

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