with tests test run rails how example effective better ruby testing rspec

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 .