자바 스크립트 프로그램의 테스트 코드를 작성하는 동안 이상한 설명 할 수없는 동작이 발견되었습니다. 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.그래서, 아니요. 'char'를 생략하여 검색 문자열을 줄이거 나 'el'을 생략 할 때까지 여전히 실패합니다.
문자열 동작을 취하고 같은 연습을하면이 동작이 발생하지 않습니다. 예를 들어, 아래는 완벽하게 작동합니다.
> 'Error: invalid channel'.indexOf('channel')
15
나는 res.body의 typeof를 확인하고 어떤 개체도 아닌 문자열로 표시됩니다.
> typeof res.body
'string'
>
혹시 비슷한 문제가 발생 했습니까? 아니면 이것에 대한 설명이 있습니까?
편집 모카 + 차이 프레임 워크가 제작 한 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 *과 동일하지 않습니다. –
''오류 : 채널이 잘못되었습니다 .'' 채널의 철자가 잘못되었습니다. – z0mBi3