Rspec: “array.should == another_array” mais sans souci de l’ordre

Je veux souvent comparer les tableaux et m’assurer qu’ils contiennent les mêmes éléments, dans n’importe quel ordre. Existe-t-il un moyen concis de le faire dans RSpec?

Voici des méthodes qui ne sont pas acceptables:

#to_set

Par exemple:

 array.to_set.should == another_array.to_set 

Cela échoue lorsque les tableaux contiennent des éléments en double.

#sort

Par exemple:

 array.sort.should == another_array.sort 

Cela échoue lorsque les éléments de tableaux n’implémentent pas #

Essayez array.should =~ another_array

La meilleure documentation que je puisse trouver est le code lui-même, qui est ici .

Depuis RSpec 2.11, vous pouvez également utiliser match_array .

 array.should match_array(another_array) 

Ce qui pourrait être plus lisible dans certains cas.

 [1, 2, 3].should =~ [2, 3, 1] # vs [1, 2, 3].should match_array([2, 3, 1]) 

J’ai trouvé =~ imprévisible et cela a échoué sans raison apparente. Passé 2.14, vous devriez probablement utiliser

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

pas très bien documenté mais j’ai quand même ajouté des liens:

Documents Rspec3

expect(actual).to eq(expected)


Documents Rspec2

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