2016-08-17 2 views
0

자바 스크립트 프로그램의 테스트 코드를 작성하는 동안 이상한 설명 할 수없는 동작이 발견되었습니다. 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 }); 
+0

* cha ** nnn ** el *은 * cha ** nn ** el *과 동일하지 않습니다. –

+0

''오류 : 채널이 잘못되었습니다 .'' 채널의 철자가 잘못되었습니다. – z0mBi3

답변

3

당신은 res.body 3 개 n들과 channel을 가지고있어.

'Error: invalid channnel'

이 그 chann 일치를 의미하지만, channe하지 않습니다 때문에 여분의 n.

+0

오, 내 안좋은 시력. 나는 늙어 가고 있을지도 모른다. ( –

0

첫 번째 코드에서 "channnel"은 3 개의 n을가집니다. 그것이 "channe"가 아닌 "channe"와 일치하는 이유입니다.

+0

@Soviut에 의해 이미 대답했다. –

+0

Thx. 너는 이것에 4 시간을 낭비했다. 때때로 나는 이것처럼 바보처럼 느껴질 수있다. –