如何用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' })