2016-09-22 218 views
0

以下代碼片段非常簡單(從https://mochajs.org/#synchronous-code)。它感覺很愚蠢,但爲什麼[1,2,3]的計算結果與undefined一起使用,而不是用於myArray變量?爲什麼我的mocha /應該拋出Array測試失敗?

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」失敗。乾杯。

回答

2

小提琴,讓您test it out

你缺少一個分號,它的破壞你的測試。我不是在邊緣的情況下專家,但你可以在網上讀到過: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]'這是查找對象屬性的一種方法。 **其猜測** – Nix