Estoy un poco confundido acerca de lo que está sucediendo con las especificaciones del controlador de andamio que genera rspec. Parecía tener sentido hasta que agregué la autorización a mi aplicación y ahora necesito actualizar mis pruebas.¿Qué está pasando aquí: rspec stub (: new) .with ...?
MyClass.stub(:new).with('these' => 'params') { mock_my_class(:save => true) }
En mi controlador combino un hash en params cuando se crea un nuevo registro (que necesita el id current_user ser válida). MyClass.new (params [: my_class] .merge (: user_id => current_user.id)) falla
prueba
expected: ({"these"=>"params"})
got: ({"these"=>"params", "user_id"=>315})
Tiene sentido que la prueba falla porque el nuevo método recibe params didn' Esperar Esperaba recibir {'these' => 'params'} pero en realidad recibió {'these' => 'params', 'user_id' => 1234}
Así que mi reacción natural es ajustar la prueba porque el El nuevo método debería recibir {'these' => 'params', 'user_id' => 1234} y devolver el objeto simulado.
Así que añadir a la prueba de la siguiente manera:
MyClass.stub(:new).with({'these' => 'params', 'user_id' => @user.id}) { mock_my_class(:save => true) }
Aquí es donde se tiran a través de un bucle. La salida de la prueba es el siguiente:
expected: ({"these"=>"params", "user_id"=>298})
got: ({"these"=>"params"})
Parece como si una prueba exitosa me está evadiendo mágicamente. Estoy seguro de que hay una razón lógica para estos resultados, pero parece que no puedo resolverlos.
¿Algún ayuda? :)
nota:
El sitio de rspec dice lo siguiente:
Account.should_receive(:find).with("37").and_return(account)
o
Account.stub!(:find).and_return(account)
Esto es bastante fácil de seguir que sólo parece extraña la del andamio generada no lo haría contienen estos métodos (a menos que haga un error en algo que es posible (:)
pases
login_admin
describe "with valid params" do
it "assigns a newly created forum_sub_topic as @forum_sub_topic" do
ForumSubTopic.stub(:new) { mock_forum_sub_topic(:save => true) }
ForumSubTopic.should_receive(:new).with({"these"=>"params", "user_id"=> @admin.id}) #PASS!
post :create, :forum_sub_topic => {'these' => 'params'}
assigns(:forum_sub_topic).should be(mock_forum_sub_topic) #PASS!
end
end
falla
login_admin
describe "with valid params" do
it "assigns a newly created forum_sub_topic as @forum_sub_topic" do
ForumSubTopic.stub(:new).with({'these' => 'params', 'user_id' => @user.id}) { mock_forum_sub_topic(:save => true) }
post :create, :forum_sub_topic => {'these' => 'params'}
assigns(:forum_sub_topic).should be(mock_forum_sub_topic)
end
end
sería bueno ver la totalidad de su código rspec para esto en lugar de solo el trozo de nuevo. A menudo encuentro que me olvido de anular todo el comportamiento del modelo (ya que solo estamos probando si el controlador se comporta correctamente dado que se supone que el modelo funciona correctamente). – jaydel
Agregué más detalles. Este es el único ejemplo que falla. –