Pregunta

Tengo una prueba de índice de controlador que obtiene un alcance de Activerecord. La prueba actualmente se ve así (incluidas algunas cosas de depuración en línea):

describe "GET index" do
  it "assigns all schools as @schools" do
    get :index
    puts assigns(:schools).class
    puts School.populated.class
    assigns(:schools).should == School.populated
  end
end

La salida es esta:

ActiveRecord::Relation
ActiveRecord::Relation

expected: []
     got: [] (using ==)
Diff:

Esta definitivamente no es la primera vez que tengo esto en versiones recientes de Rails y RSPEC. Anteriormente, un compañero de trabajo simplemente envolvería los artículos en un to_a Para compararlos, lo cual encuentro un poco sucio y probablemente no es una buena solución.

¿Algunas ideas? Tengo curiosidad por saber por qué piensa que son diferentes, y cómo se pasó esta misma prueba en versiones anteriores de rieles y/o RSPEC.

¿Fue útil?

Solución

EQL es lo mismo que ==. Autor de RSPEC Talks solo no usa !=, usar no debe en cambio

actual.should == expected
#is interpreted as this:

actual.should.==(expected)

#This is not true for !=. Ruby interprets this: actual.should != expected
#as follows:

!(actual.should.==(expected))

Actualizar: La relación proporciona un patrón de carga perezoso, por lo que no tiene ninguna consulta ejecutada en el paso. Significa el incendio la consulta en primera solicitud

Otros consejos

Si desea comparar matrices, debe escribir

 assigns(:schools).all.should =~ School.populated.all
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top