2017-06-02 9 views
1

私はいくつかのユニットテストを、配列の結果と配列を比較することを試みていますが、残念なことにその結果は、オブジェクトの順序は、テストが失敗した、常に同じではありません。ノードモカ/チャイユニットテスト - オーダーに関係なくオブジェクトの配列を比較

expect(a.length).to.equal(b.length); 
for(let item of b){ 
    expect(a).to.deep.contain(item); 
} 

簡体例

var a = [ 
    {name: 'Joe', age: 35}, 
    {name: 'Steve', age: 30}, 
] 

//assume we got the result in this order 
var b = [ 
    {name: 'Steve', age: 30}, 
    {name: 'Joe', age: 35}, 
] 

expect(a).to.deep.equal(b) //Fails 

私の現在の回避策は、これを行うことです

しかし、私はモカ/チャイでの注文に関係なく直接比較を深める方法を探しています、それは可能ですか?

更新: これはハックのビットですが、それはかもしれないが、誰がそれを必要とする場合には、あなたがのtry/catchで、エラー用途に全体を置くことができ、深い含まれているのに役立ちます:

try{ 
    expect(a).to.have.deep.members(b); 
}catch(e){ 
    expect(a).to.deep.equal(b); 
} 

最初のテストが失敗した場合は、2番目のテストも失敗しますが、失敗しても差異が出力されます。

答えて

0

はこれを試してみてください:

expect(a).to.have.deep.members(b) 

ドキュメント:http://chaijs.com/api/bdd/#method_members

+0

おかげで、この作業を行いますが、テストが失敗した場合、それは違いを(のような深い含まれて)表示されません、それを強制する方法はあります? – Mankind1023

+0

@ Mankind1023私はそれが可能だとは思わない:( – robertklep

関連する問題