mock ruby-on-rails ruby mocking rspec

ruby-on-rails - rspec mock ruby



¿Cuáles son las ventajas de Mocha sobre el marco de burla incorporado de RSpec? (4)

Noto que mucha gente prefiere Mocha sobre el marco de burla incorporado de RSpec. ¿Alguien puede explicar las ventajas de Mocha, o cualquier alternativa, sobre RSpec construido en un marco de burla?


Los marcos de burla de Ruby han evolucionado mucho desde que se hizo esta pregunta en 2009. Así que aquí hay una pequeña comparación de 2013:

Esperanzas de heredar

  • con Rspec-mocks: expect(user).to receive(:say_hello)
  • con Mocha: user.expects(:say_hello).once

Trozar un objeto

  • con Rspec-mocks: user = double(name: ''John Doe'')
  • con Mocha: user = stub(name: ''John Doe'')

Copiando cualquier cosa

  • con Rspec-mocks: User.any_instance.stub(:name).and_return(''John Doe'')
  • con Mocha: User.any_instance.stubs(:name).returns(''John Doe'')

Ofrecen las mismas instalaciones, y ambos se pueden usar con o sin Rspec.
Entonces, yo diría que elegir una sobre otra es una cuestión de gusto personal (y saben muy bien).


Por lo que sé, Mocha admite Double Injections (también conocido como Parcial Mocking, que también es compatible con rr), pero no está seguro de que RSpec también admita esta función.

Además, para aquellos que prefieren cambiar entre frameworks de prueba, Mocha es una solución universal aplicable para Test / Unit, Shoulda, etc. El uso de la burla de RSpec con todas estas librerías será una exageración.


Una característica específica que realmente me gusta es poder anular todas las instancias de una clase. Muchas veces hago algo como lo siguiente con los simulacros de RSpec:

stub_car = mock(Car) stub_car.stub!(:speed).and_return(100) Car.stub!(:new).and_return(stub_car)

con Mocha que se convierte en:

Car.any_instance.stubs(:speed).returns(100)

Encuentro la versión de Mocha más clara y más explícita.


Yo por mi parte uso mocha porque no uso rspec. Uso test / unit, y test / unit no tiene stubbing ni burla incorporados.