2015-07-21 64 views
3

使用mocha和chai進行測試時,我經常需要測試數組中所有元素是否滿足條件。使用chai來檢查數組中的所有元素

目前我使用類似以下內容:

var predicate = function (el) { 
    return el instanceof Number; 
}; 

it('Should be an array of numbers', function() { 
    var success, 
     a = [1, 2, 3]; 

    success = a.every(predicate); 
    expect(success).to.equal(true); 
}); 

翻翻docs,我不能immediatley看不到它提供了這種行爲。我是否錯過了某些東西,還是必須編寫一個擴展柴的插件?

回答

7

可能並非在你目前的做法有了很大的改進,但你可以這樣做:

expect(a).to.satisfy(function(nums) { 
    return nums.every(function(num) { 
     return num instanceof Number; 
    }); 
}); 
+1

是的,這樣好一點。沒有看到文檔中的'.satisfy',我會看看我是否可以擴展一個小插件 – StickyCube

+1

不適用於我的情況:這是工作 expect(a).to.satisfy(function(nums){ return nums.every(function(num){ return typeof(num)===「number」; }); }); – Apoorv

3

Chai Things看看,它是柴一個插件,旨在提高陣列的支持。

例子:

[1, 2, 3].should.all.be.a('number')

0

如增加了兩個以上的答案與滿足柴東西

a.should.all.satisfy(s => typeof(s) === 'number'); 

的變種一些情況下,你也可以使用類似的結果這

a.filter(e => typeof(e)==='number').should.have.length(a.length); 
a.filter(e => typeof(e)==='number').should.eql(a); 
+0

請複習[我如何寫出一個好答案](https://stackoverflow.com/help/how-to-answer)。不接受代碼的答案是不鼓勵的,因爲他們沒有解釋他們如何解決問題中的問題。你應該更新你的答案,以解釋這是什麼以及如何使用它。 – FluffyKitten