1. ホーム
  2. ルビー

[解決済み】Rspec: 「array.should == another_array "だが、順番は気にしない。

2022-04-05 18:09:20

質問

配列を比較し、どのような順序でも同じ要素が含まれていることを確認したいことがよくあります。RSpecでこれを行う簡潔な方法はありますか?

受け入れられないメソッドを紹介します。

#to_set

例えば

expect(array.to_set).to eq another_array.to_set

または

array.to_set.should == another_array.to_set

配列に重複する項目がある場合、失敗します。

#sort

例えば

expect(array.sort).to eq another_array.sort

または

array.sort.should == another_array.sort

これは、array 要素が #<=>

解決方法は?

使用方法 match_array 別の配列を引数にとるか contain_exactly これは各要素を個別の引数として受け取るもので、可読性を高めるために有効な場合があります。( ドキュメント )

expect([1, 2, 3]).to match_array [3, 2, 1]

または

expect([1, 2, 3]).to contain_exactly 3, 2, 1