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

时间:2013-10-07 21:47:01

标签: javascript node.js should.js deepequals

我尝试使用should.js(最新版本)进行deepEqual断言并且没有取得任何成功。我可以使用equal但不能使用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,我发现它是一个吸气剂:

> 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可以遵循哪些内容。

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

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

应该文档甚至根本没有提到deepEqual,这让我很困惑。为了让事情更加混乱,当我在节点REPL上输入deepEqual时,我看到should。但据我所知,它被埋在ok元素中。

TL; DR:如何从assertEqual拨打should或同等号码?

1 个答案:

答案 0 :(得分:13)

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

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

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