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をチェックしようとすると「エラー:無効なチャンネル」、Iは正の値を取得することになって、それが与えられた-1。
ですから、検索文字列を減らして 'チャンネル'だけを含む、つまり 'el'を省略するまで、それはまだ失敗します。
しかし、私は文字列litteralを取り、同じ演習を行う場合、この動作は起こりません。たとえば、以下は完全に機能します。
> 'Error: invalid channel'.indexOf('channel')
15
私は先に進み、res.bodyのタイプをチェックし、文字列として表示し、オブジェクトは表示しません。
> typeof res.body
'string'
>
誰も同じような問題に直面しましたか?またはこれに説明がありますか?
編集 私がres.bodyをmocha + chaiフレームワークで作成したときに起こります。完全なコードは以下の通りです:
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 *と同じではありません。 –
''エラー:チャンネルが無効です ''チャンネルのスペルが間違っています – z0mBi3