I'm not sure if its a Rspec question, but I only encountred this problem on Rspec tests.
I want to check if an array is equal to another array, regardless of the elements order :
[:b, :a, :c] =?= [:a, :b, :c]
My current version :
my_array.length.should == 3
my_array.should include(:a)
my_array.should include(:b)
my_array.should include(:c)
Is there any method on Rspec, ruby or Rails for do something like this :
my_array.should have_same_elements_than([:a, :b, :c])
Regards
There is a match_array
matcher in RSpec which does this:
http://rubydoc.info/github/rspec/rspec-expectations/RSpec/Matchers:match_array
You can use the =~
operator:
[:b, :a, :c].should =~ [:a, :b, :c] # pass
From the docs:
Passes if actual contains all of the expected regardless of order. This works for collections. Pass in multiple args and it will only pass if all args are found in collection.
For RSpec's expect syntax there's match_array
:
expect([:b, :a, :c]).to match_array([:a, :b, :c]) # pass
or contain_exactly
if you're passing single elements:
expect([:b, :a, :c]).to contain_exactly(:a, :b, :c) # pass
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With