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することができます
その質問は、なぜ '説明;'関数式を使用するときに使用すべきです。この場合、それぞれの 'something.should.whatever()'はオブジェクトを返します。実際には、 'something'の' Object.prototype'を拡張する必要があります。とにかく、ライン 'a'と 'b'がスワップされているときにテストに合格するのはなぜですか? –
私は、さまざまなランタイムがjavascriptを解析する方法について専門家ではなく、なぜ失敗したのか尋ねました。そして、あなたのステートメントを終了しなかったからです。ベストプラクティスはセミコロンを使うことですが、私の推測は、オブジェクト上のプロパティを検索する方法である '[xxx]'が見えるので、リテラルが2番目に来て、プロパティの参照をしようとしているときです。 **その推測** – Nix