2016-09-22 10 views
0

次のコードスニペットは非常にシンプルです(https://mochajs.org/#synchronous-code)。なぜなら、[1,2,3]は、myArray変数で使用されているときには、リテラル表記と一緒に使用するとundefinedと評価されるのはなぜですか?なぜ私のmocha/should配列投げテストが失敗しますか?

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 ... 

が、私はこの、不穏な、しかし確実に、簡単に答えの質問にいくつかの光をいただければ幸いです:私はテストを実行すると、以下のように

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を解析する方法について専門家ではなく、なぜ失敗したのか尋ねました。そして、あなたのステートメントを終了しなかったからです。ベストプラクティスはセミコロンを使うことですが、私の推測は、オブジェクト上のプロパティを検索する方法である '[xxx]'が見えるので、リテラルが2番目に来て、プロパティの参照をしようとしているときです。 **その推測** – Nix

関連する問題