我使用should.js框架(v8.2.x)进行单元测试,并且一直在玩一些非常基本的测试。然而,我遇到了这个测试失败的问题,这一直困扰着我。现在根据自己的github,should(something)
和something.should
通常返回相同的事情Should.js - equals方法中的不一致should.equals
should.equal(add('1', '1'), '2'); // passes
add('1', '1').should.equal('2') // fails!
:
我定义这个虚拟函数测试,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
};
现在我这里还有我的假人测试,但没有关于差异的其他信息。
根据它们的API documentation,should.equal
与assert.equal
相同。但这种测试通过对我来说:
assert.equal(add('1','1'), '2'); // passes
所以我有三个问题:
- 为什么
add('1', '1').should.equal('2')
不能通过? - 为什么两种用法会产生不同的结果?
- 为什么文档说
should.equals
与assert.equals
实际上有不同的行为?
我猜,一个是使用''==,另一个是使用''===。 'add'函数返回一个'Number',你正在比较一个'string'。也许所做的类型强制是不同的?如果你做'add('1','1')should.equal(2)',会发生什么? –
什么@ChrisTavares说,每当你处理的测试号VS字符串你应该看看是如何执行的测试,我会假设测试将返回'“11''为'” 1' +“1''但很明显,这不是字面意思。 – brod
@ChrisTavares是的,'equals'应该在javascript中使用'=='和'1 =='1''。还有'strictEquals'使用'==='。 'add('1','1')。should.equal(2)'确实通过。 @brod如果你看一下'add',我使用的是一元'+'经营者强迫他们数= –