Rspec: "array.should == another_array" but without concern for order

nicholaides picture nicholaides · Jun 5, 2010 · Viewed 65.7k times · Source

I often want to compare arrays and make sure that they contain the same elements, in any order. Is there a concise way to do this in RSpec?

Here are methods that aren't acceptable:

#to_set

For example:

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

or

array.to_set.should == another_array.to_set

This fails when the arrays contain duplicate items.

#sort

For example:

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

or

array.sort.should == another_array.sort

This fails when the arrays elements don't implement #<=>

Answer

x1a4 picture x1a4 · Jun 5, 2010

Try array.should =~ another_array

The best documentation on this I can find is the code itself, which is here.