2016-09-22 5 views
0

다음 코드 단편은 매우 간단합니다 (https://mochajs.org/#synchronous-code). 어리 석음이라고 느껴질 때 [1,2,3]은 문자 표기법과 함께 사용될 때 undefined으로 평가되고 myArray 변수에 사용되는 것은 아닙니다.왜 내 모카/어레이 스레딩 테스트가 실패합니까?

Array 
    #indexOf() 
    1) Should return -1 when the value is not present 

1) Array #indexOf() Should return -1 when the value is not present: 
    TypeError: Cannot read property 'indexOf' of undefined 

    ... Error trace just points the line where it fails, nothing else ... 

내가이, 불안, 그러나 확실하게 쉬운 대답 질문에 대한 몇 가지 빛을 부탁드립니다 A :이 테스트를 실행하면 다음과 같이

var assert = require('assert') // "mocha": "^3.0.2" 
var should = require('should') // "should": "^11.1.0" 

describe('Array', function() { 
    describe('#indexOf()', function() { 
    var myArray = [1, 2, 3] 
    it('Should return -1 when the value is not present', function() { 
     myArray.indexOf(0).should.equal(-1)  // a - success 
     [1, 2, 3].indexOf(0).should.equal(-1) // b - fails test 
    }) 
    }) 
}) 

는 라인 'B'는 실패합니다. 건배. test it out 당신을 수 있습니다

답변

2

바이올린 :

귀하의 세미콜론 누락하고 테스트를 방해하는 것

. 나는 가장자리의 경우에 전문가가 아니에요하지만 당신은 온라인으로 그들에 대해 읽을 수 있습니다 Why should I use a semicolon after every function in javascript?

myArray.indexOf(0).should.equal(-1) ; 
[1, 2, 3].indexOf(0).should.equal(-1); 
+0

그 질문은 왜'설명,'함수 표현식을 사용하는 경우 사용되어야한다. 이 경우 각각의'something.should.whatever()'는 객체를 반환합니다. 실제로'something'의'Object.prototype'을 확장해야합니다. 어쨌든, 왜 라인 'a'와 'b'가 스왑 될 때 테스트가 통과합니까? –

+0

내가 말했듯이 나는 다양한 런타임이 javascript를 분석하는 방법에 대한 전문가가 아니므로 왜 실패했는지 물어 보았습니다. 귀하의 진술을 종결하지 않았기 때문입니다. 가장 좋은 방법은 세미 콜론 (semi-colons)을 사용하는 것입니다. 객체에 대한 속성을 찾는 방법 인'[xxx]'를보기 때문에 리터럴이 두 번째로 축소되어 속성 조회를 시도 할 때입니다. ** 그 추측 ** – Nix