我在为我的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 });
* cha ** nnn ** el *与* cha ** nn ** el *不一样。 –
''错误:无效channnel''渠道拼写错误 – z0mBi3