279 votes

Rspec : "array.should == another_array" mais sans se soucier de l'ordre

Je souhaite souvent comparer des 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 :

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

ou

array.to_set.should == another_array.to_set

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

#sort

Par exemple :

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

ou

array.sort.should == another_array.sort

Cela échoue lorsque les éléments du tableau n'implémentent pas l'option #<=>

7 votes

Je ne veux pas faire le malin, mais en comparant to_set y size ne fait pas ce que vous voulez. Par exemple, [a, b, b] correspondrait à [a, a, b]. À la vôtre !

4 votes

Pour ceux qui sont tombés ici en se demandant le contraire : l'ordre devrait être le même . Utilisez le eq matcher, par exemple expect([1, 2]).to_not eq([2, 1])

1voto

Blair Anderson Points 587

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

Rspec3 docs

expect(actual).to eq(expected)


Rspec2 docs

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

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X