我使用了should.js框架(v8.2.x)进行单元测试,并且一直在玩一些非常基本的测试。但是,由于测试失败,我遇到了这个问题,这让我很难过。
我将这个虚拟函数定义为测试add
:
var add = function(a, b) {
if (isNaN(a) || isNaN(b)) {
throw new Error('One of the arguments is not a number');
}
return +a + +b
};
现在我的虚拟测试:
should.equal(add('1', '1'), '2'); // passes
add('1', '1').should.equal('2') // fails!
现在根据他们的github,should(something)
和something.should
通常会返回相同的内容,但没有关于差异的其他信息。
根据他们的API documentation,should.equal
与assert.equal
相同。但是这个测试通过了我:
assert.equal(add('1','1'), '2'); // passes
所以我有三个问题:
add('1', '1').should.equal('2')
没有通过?should.equals
与assert.equals
实际上有不同的行为时相同?答案 0 :(得分:0)
回答你的问题和你的错误。
现在根据他们的github,应该(某事)和某事。通常会返回相同的东西,但是没有关于差异的额外信息。
should(something)
和something.should
通常是相同的。但是你使用了should.equal,docs没有说它与其他方法的公平性。只有copy of node.js拥有assert.equal
为什么添加('1','1')。should.equal('2')不通过?
因为docs明确表示它在内部使用===。
为什么两种用法会产生不同的结果?
因为这是不同的方法,并且没有地方说它应该是平等的。
为什么文档说we.equals与assert.equals实际上有不同的行为时相同?
$ node
> var should = require('.')
undefined
> var assert = require('assert')
undefined
> var add = function(a, b) {
... if (isNaN(a) || isNaN(b)) {
..... throw new Error('One of the arguments is not a number');
..... }
... return +a + +b
... };
undefined
> should.equal(add('1', '1'), '2');
undefined
> assert.equal(add('1', '1'), '2');
undefined
所以要尝试清除你的错误:在should.js中存在should.equal(a, b)
,它与assert.equal
相同。同样存在something.should.equal(other)
内部使用===
(因为存在.eql
进行深度相等检查),should(somethng).equal(other)
也与something.should.equal(other)
相同(但不适用于标准包装)。
希望它能说清楚。