我经常想比较数组并确保它们以任何顺序包含相同的元素。在 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
当数组元素没有实现时,这会失败#<=>
#<=>
使用match_array,将另一个数组作为参数,或contain_exactly,将每个元素作为单独的参数,有时对可读性很有用。(文档)
match_array
contain_exactly
例子:
expect([1, 2, 3]).to match_array [3, 2, 1]
expect([1, 2, 3]).to contain_exactly 3, 2, 1