ruby - tests - rspec subject
Rspec: "array.should== another_array" pero sin preocuparse por el orden (4)
Desde RSpec 2.11 también puedes usar match_array
.
array.should match_array(another_array)
Lo que podría ser más legible en algunos casos.
[1, 2, 3].should =~ [2, 3, 1]
# vs
[1, 2, 3].should match_array([2, 3, 1])
A menudo quiero comparar matrices y asegurarme de que contengan los mismos elementos, en cualquier orden. ¿Hay una manera concisa de hacer esto en RSpec?
Aquí hay métodos que no son aceptables:
#to_set
Por ejemplo:
array.to_set.should == another_array.to_set
Esto falla cuando las matrices contienen elementos duplicados.
#sort
Por ejemplo:
array.sort.should == another_array.sort
Esto falla cuando los elementos de los arrays no implementan #<=>
He encontrado que =~
es impredecible y ha fallado sin ninguna razón aparente. Pasado 2.14, probablemente deberías usar
expect([1, 2, 3]).to match_array([2, 3, 1])
No está muy bien documentado, pero he añadido enlaces de todos modos:
Documentos Rspec3
expect(actual).to eq(expected)
Documentos Rspec2
expect([1, 2, 3]).to match_array([2, 3, 1])
Prueba array.should =~ another_array
La mejor documentación sobre esto que puedo encontrar es el código en sí, que está here .