2015-11-16 7 views
6

私はchaiとchai-as-promisedでいくつかのテストを書いていますが(さらに多くのフレームワークがありますが、この場合は問題ありません)、配列がウェブページから得られるかどうかを確認する必要があります事前に定義された配列と同じです。 expect(arrayFromPage).to.eventually.deep.equal(predefinedArray)を使用しようとしましたが、ページ上の要素の順序が異なる場合があります(これは正常ですが、同じ順序であるかどうかを確認する必要はありません)。チャイの配列を比較する

私はexpect(listFromPage).to.eventually.include.all.members(predefinedArray)を使用して問題を回避する方法を見つけましたが、より良い解決策があるかどうかを知りたいと思います。

私の回避策で最も気になるのは、predefinedArrayがサブエレメントがlistFromPageであることを保証しているだけで、同じ要素で構成されているわけではありません。

だから、私は[1,2,3][3,2,1]のためではなく[1][1,2,3]または[1,2,3,4][1,2,3]のために渡しますアサートがあるかどうかを知りたいのです。

私はいくつかの第2の期待(長さの比較など)を使用できることを知っていますが、1行の解決方法があるかどうかを知りたいと思います。

答えて

12

以前に解決済みとマークされていたのを見て、受け入れられた回答と同じことを試みました。それはおそらく、当時働いていたが、もはや動作していないよう:

expect([1, 2, 3, 4]).to.have.all.members([2, 4, 3, 1]); 

は、次のエラーを与える:

AssertionError: expected 1 to be an array 

私は少しより多くの研究を行なったし、戻って、この機能を追加したプルリクエストを見つけました2013年:

https://github.com/chaijs/chai/pull/153

だから今これを行う公式の方法は、このようなものです:

これは今同じ答えを探して誰にも役立ちます

AssertionError: expected [ 1, 2, 3, 4 ] to have the same members as [ 4, 3, 1 ] 

希望:

expect([1, 2, 3, 4]).to.have.same.members([2, 4, 3, 1]); 

は完全を期すため、ここでは2つの異なるセットが生成するエラーです。 :-)

将来、私のために働いた道から
+0

このプルリクエストが'13 'にマージされた場合、8月16日に何が起こったのか? – Alissa

+0

しかし、コミットを深く掘り下げた場合、おそらくそれはそれが今までとは一度もやっていなかったので、うまくいかないかもしれません。 :-) – sindrenm

2

あなたは2行でそれを行うことができます。これにより

expect(listFromPage).to.eventually.include.all.members(predefinedArray) 
expect(predefinedArray).to.eventually.include.all.members(listFromPage) 

、両方の配列が同じ値が含まれているかどうかをチェックします。しかし、順序は関係ありません。

+0

私はそれが動作する場合はわからないんだけど、私のためのトリックをした.deepEqualを、使用していましたpromiseの配列であり、 'predefinedArray'は値の配列です。私は配列の長さを比較することもできますが、1行の解決方法があるのだろうかと思います。 – Alissa

+0

もう1つの答えに記載されているように、 "have"を使用する1行の解決法があります。 –

4

ドキュメントからは完全にはっきりしていませんが、.to.have.all.membersが動作しているようです。私は.keysのためのこの特徴の言及を見つけることしかできなかったが、それはまた.membersの配列のために働くように見える。

+0

expect([1,2,3,4]).to.have.all.members([1,2,3]) 'が失敗するということを意味しますか?このケースでは失敗する必要があるので、 'to.have.all.members'を使用することが主な懸念事項です。 – Alissa

+0

はい、まさに:' expect([1,2,3,4])。to.have.all .emembers([2,3,4,4]) 'は成功しますが、' expect([1、2、3、4]).to.have.all.members([1,2,3]) 'は失敗します'AssertionError:[1、2、3、4]は[1,2,3]と同じメンバーを持つことが期待されます。 – pdenes

+0

これはおそらく書いた時点では機能していましたが、その後動作を停止しました。現在の動作例については、[my answer](http://stackoverflow.com/a/42972555/664955)を参照してください。 :-) – sindrenm

1

、listFromPage` `として

assert.deepEqual(['name'], ['name'], 'this must be same to proceed');