rails matchers ruby-on-rails ruby rspec

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