我试图用should.js(最新版本)做出深刻的断言,并没有取得任何成功.我可以让事情平等而不是深度工作.其实我看到没有深度的方法.
这是我试过的:
> 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'
很公平.现在看,应该,我看到这是一个吸气者:
> 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,configurable: false }
所以我现在比较坚持.我只想看看应该怎么做的事情.
我做了read the docs,它表示should.js字面上扩展了节点的assert模块,但节点的assert确实允许deepEqual.
> assert = require('assert') > assert.deepEqual [Function: deepEqual]
应该没有提到deepEqual,这真的让我困惑.为了使事情变得更加混乱,当我在节点REPL上输入时,我会看到一个deepEqual.但是,据我所知,它被埋在一个ok元素中.
TL; DR:如何从应用中调用assertEqual或其等价物?
解决方法
我想你应该(双关语)使用eql方法.
https://github.com/visionmedia/should.js/#eql
({ foo: 'bar' }).should.eql({ foo: 'bar' })