2015-06-04 38 views
0

我是應用於數組並更改其項目狀態的單元測試方法。這些項目有不同的屬性。 例如,我的數組如下:應用該方法使用項目索引的單元測試數組

var array = [{state: false}, {status: true}, {health: true}]; 

後(項目順序是相關的),我檢查這些值已經改變,並且我希望那些(我使用的是摩卡柴):

expect(array[0]).to.have.property('state', true); 
expect(array[1]).to.have.property('status', false); 
expect(array[2]).to.have.property('health', false); 

現在,說,我想新能源項目添加到我的數組:

var array = [{state: false}, **{energy: true}**, {status: true}, **{energy: true}**, {health: true}]; 

我不得不改變我的0,1,我測試的2個索引0 ,2,4,也加上我的新項目的新測試。

什麼是使用(或不使用)索引的好方法,以便每次添加新的項目類型時,我不必更改所有索引?

回答

1

你可以針對在您所期望的方式構造模板測試結果。在下面的代碼expected是模板。

var chai = require("chai"); 
var expect = chai.expect; 

var a = [{state: false}, {energy: true}, {status: true}, {health: true}]; 

var expected = [ 
    {state: false}, 
    {energy: true}, 
    {status: true}, 
    {health: true} 
]; 

for (var i = 0, item; (item = expected[i]); ++i) { 
    expect(a[i]).to.eql(expected[i]); 
} 

你也可以這樣做:

expect(a).to.eql(expected); 

,但如果你這樣做摩卡產生一個完全無信息斷言失敗消息:expected [ Array(4) ] to deeply equal [ Array(4) ]。在循環中逐個執行期望可以讓你獲得更好的消息。像expected { state: true } to deeply equal { state: false }

+1

如果使用chai.config.showDiff = true配置chai;和chai.config.truncateThreshold = 0;那麼深度平等失敗信息將至少包括完整的對象。不幸的是,它並沒有告訴你它們在哪裏不同。 –

+0

我曾嘗試開啓'showDiff',但沒有意識到'truncateThreshold'是一個問題。這很好。謝謝!儘管如此,我仍然不願意看到差異。 – Louis

0

有是哉插件chai-things這使得這個真正可讀:

[{ a: 'cat' }, { a: 'dog' }].should.contain.a.thing.with.property('a', 'cat') 
+0

在我的情況下,我可以在我的數組中有多次具有相同屬性的項目,並且它們在數組中的位置也很重要,因此此測試是不夠的。 – Komo