ruby on rails - run - Cómo decir "should_receive" más veces en RSpec
rspec documentation (4)
Esto esta desactualizado Por favor, compruebe la respuesta de Uri a continuación
por 2 veces:
Project.should_receive(:find).twice.with(@project).and_return(@project)
exactamente n veces:
Project.should_receive(:find).exactly(n).times.with(@project).and_return(@project)
por lo menos n veces:
Project.should_receive(:msg).at_least(n).times.with(@project).and_return(@project)
más detalles en https://www.relishapp.com/rspec/rspec-mocks/v/2-13/docs/message-expectations/receive-counts en Receive Counts
Espero que ayude =)
Tengo esto en mi prueba
Project.should_receive(:find).with(@project).and_return(@project)
pero cuando el objeto recibe ese método llama dos veces, tengo que hacer
Project.should_receive(:find).with(@project).and_return(@project)
Project.should_receive(:find).with(@project).and_return(@project)
¿Hay alguna manera de decir algo así como
Project.should_receive(:find).with(@project).and_return(@project).times(2)
@JaredBeck señaló. La solución no funcionó para mí en any_instance
llamada de any_instance
.
En cualquier caso, terminé usando stub en lugar de should_receive.
Project.any_instance.stub(:some_method).and_return("value")
Esto funcionará para cualquier no. de veces sin embargo.
La nueva sintaxis esperada de rspec se verá así:
por 2 veces:
expect(Project).to receive(:find).twice.with(@project).and_return(@project)
exactamente n veces:
expect(Project).to receive(:find).exactly(n).times.with(@project).and_return(@project)
por lo menos n veces:
expect(Project).to receive(:msg).at_least(n).times.with(@project).and_return(@project)
should_receive
, a diferencia de any_instance
, espera que la clase reciba el mensaje el número de veces especificado.
any_instance
por otro lado generalmente se usa para anotar un método.
Entonces, el primer caso es una expectativa de que nos gustaría probar, mientras que el segundo es pasar un método a la siguiente línea para que podamos avanzar.