2016-08-17 181 views
0

我在爲我的JavaScript程序編寫一段測試代碼時發現了一個奇怪的無法解釋的行爲。我正在比較res.body的輸出以檢查它是否包含字符串。javascript indexOf奇怪的行爲

更確切地說,我在檢查res.body是否包含字符串'channel'。

即使輸出確實包含該字符串,測試用例總是失敗。我在調試模式下運行該程序,以檢查其失敗的原因。至少可以說,結果令人費解。

> res.body 
'Error: invalid channnel' 
> res.body.indexOf('channel') 
-1 
> res.body.indexOf('channe') 
-1 
> res.body.indexOf('chann') 
15 
> 

如果我嘗試在res.body,其價值是「錯誤:無效通道」檢查「通道」的的indexOf,我應該得到一個積極的價值,但它給-1。

所以,我試圖通過減少沒有。在搜索字符串中只包含'chann',即省略'el',它仍然失敗。

但是這種行爲不會發生,如果我採取字符串litteral並做相同的練習。例如,下面的作品完美。

> 'Error: invalid channel'.indexOf('channel') 
15 

我繼續檢查res.body的類型,它顯示爲字符串,而不是任何對象。

> typeof res.body 
'string' 
> 

有沒有人曾經遇到類似的問題?或者有解釋嗎?

編輯 它發生在我通過mocha + chai框架生成res.body時。完整的代碼如下:

58 it ("Should fail with 400, if invalid channel", function(done) { 
59  chai.request(app).post('/campaigns/js') 
60  .send(samples.type0.invalidChannel) 
61  .end(function(err, res) { 
62  console.log("response:", res.body); 
63  expect(res).to.have.status(400); 
>64  debugger; 
65  expect(res.body).to.contain('channel'); 
66  return done(); 
67  }); 
68 }); 
+0

* cha ** nnn ** el *與* cha ** nn ** el *不一樣。 –

+0

''錯誤:無效channnel''渠道拼寫錯誤 – z0mBi3

回答

3

res.body具有秒。

'Error: invalid channnel'

這意味着chann比賽,但channe不會因爲額外的n

+0

哦,我的眼睛不好。可能是我越來越老了:( –

0

在第一段代碼中,「channnel」有3個n。這就是爲什麼它匹配「chann」而不是「channe」。

+0

回答已經給@Soviut –

+0

Thx給大家,我浪費了4個小時的時間,有時候我會變得這麼愚蠢。 –