Cuando escribo pruebas de RSpec, me encuentro escribiendo una gran cantidad de código que se ve así para asegurarme de que se llamó a un método durante la ejecución de una prueba (por el bien del argumento, digamos que realmente no puedo interrogar el estado del objeto después de la llamada porque la operación que realiza el método no es fácil de ver el efecto de).
describe "#foo"
it "should call 'bar' with appropriate arguments" do
called_bar = false
subject.stub(:bar).with("an argument I want") { called_bar = true }
subject.foo
expect(called_bar).to be_true
end
end
Lo que quiero saber es: ¿Existe una sintaxis mejor disponible que esta? ¿Me estoy perdiendo algo de genialidad de RSpec funky que reduciría el código anterior a unas pocas líneas? should_receive
Parece que debería hacer esto, pero leyendo más, parece que no es exactamente lo que hace.
ruby-on-rails
ruby
rspec
Mikey Hogarth
fuente
fuente
should_receive
, así que pensé que esa pregunta ayudaría.Respuestas:
fuente
called_bar
. Eso fue solo una bandera para garantizar que se llamara al método, peroexpect(...).to receive(...)
ya lo está cubriendo. Es más claro y semánticoEn la nueva
rspec
expect
sintaxis, esto sería:fuente
Lo siguiente debería funcionar
Documentación: https://github.com/rspec/rspec-mocks#expecting-arguments
fuente
have_received
(el enfoque de "espías" después del hecho), nohas_received
, que no es parte de ninguna versión de RSpec que yo sepa.Para cumplir completamente con la sintaxis RSpec ~> 3.1 y
rubocop-rspec
la opción predeterminada para la reglaRSpec/MessageSpies
, esto es lo que puede hacer conspy
:Si no usa rubocop-rspec o usa una opción no predeterminada. Por supuesto, puede usar RSpec 3 predeterminado con expectativa.
fuente