Los rieles y las pruebas de igualdad RSpec tienen una variedad de opciones.
Rails 3.2 ActiveRecord :: Base utiliza el igualador de igualdad ==
.
devuelve true dos maneras diferentes:
- Si
self
es el mismo objeto exacto como el objeto de comparación
- Si
self
es el mismo tipo que el objeto de comparación y tiene el mismo ID
Tenga en cuenta que ActiveRecord :: Base tiene el método ==
que tiene un alias como eql?
. Esto es diferente a los objetos típicos de Ruby, que definen ==
y eql?
de manera diferente.
RSpec 2.0 tiene estos comparadores de igualdad en rspec-expectativas:
a.should equal(b) # passes if a.equal?(b)
a.should eql(b) # passes if a.eql?(b)
a.should == b # passes if a == b
RSpec también tiene dos comparadores igualdad destinados a tener más de un DSL sentir a ellos:
a.should be(b) # passes if a.equal?(b)
a.should eq(b) # passes if a == b
En su ejemplo se Estamos creando un registro y luego lo encontramos.
lo que tiene dos opciones para las pruebas #find_by_name
:
Para probar si se recupera el mismo objeto exacto O un registro de persona equivalente con el mismo ID, a continuación, utilizar should ==
o su equivalente a.should eql
o su versión DSL should eq
Para probar si se utiliza el mismo objeto exacto NO un registro equivalente persona con el mismo ID, a continuación, utilizar should equal
o su versión DSL should be
¿A qué dos objetos diferentes hace referencia? – jtbandes
@jtbandes: en la primera línea se devuelve un objeto al que se hará referencia a "persona". en la segunda línea se devuelve un objeto y este objeto debe ser igual a la persona. Entonces, ¿no son esos dos objetos? –
O bien a) el mismo objeto exacto podría ser devuelto; o b) el segundo objeto podría ser igual (por su propio 'igual?' u otro método) al primero, como tener las mismas propiedades (en este caso, 'nombre').Lea los documentos ActiveRecord :: Base. – jtbandes