ruby on rails - matchers - RSpec: ¿cómo probar si se llamó un método?
ruby on rails selenium (3)
Cuando escribo las pruebas de RSpec, me encuentro escribiendo mucho 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 al 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: ¿hay una sintaxis más agradable disponible que esta? ¿Me estoy perdiendo un poco de genialidad de RSpec funky que reduciría el código anterior a unas pocas líneas? should_receive
suena como debería hacer esto pero leer más adelante parece que no es exactamente lo que hace.
El siguiente debería funcionar
describe "#foo"
it "should call ''bar'' with appropriate arguments" do
subject.stub(:bar)
subject.foo
expect(subject).to have_received(:bar).with("Invalid number of arguments")
end
end
Documentación: https://github.com/rspec/rspec-mocks#expecting-arguments
En la nueva sintaxis de rspec
expect
esto sería:
expect(subject).to receive(:bar).with("an argument I want")
it "should call ''bar'' with appropriate arguments" do
expect(subject).to receive(:bar).with("an argument I want")
subject.foo
end