我使用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',我使用的是一元'+'經營者強迫他們數= –