2016-08-17 90 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个小时的时间,有时候我会变得这么愚蠢。 –