tutorial rails matchers factory_girl_rails bot ruby-on-rails ruby-on-rails-3 rspec rspec2 rspec-rails

ruby on rails - rails - ¿Cuál es la diferencia entre stub_model y mock_model en RSpec?



rspec rails tutorial (1)

¿Cuál es la diferencia entre stub_model y mock_model en RSpec? Hasta ahora, sé que los stubs se usan para evitar que se llame al método real y devolver un valor predefinido, y los simulacros en realidad son expectativas y requieren que se llame al método en el receptor.

También sé que estos stubs / mocks se usan para permitir pruebas aisladas, como en los controladores sin tocar el modelo. Pero todavía estoy confundido con estos dos métodos, ¿cuándo se usan exactamente? Los detalles y ejemplos serían muy apreciados. ¡Muchas gracias!


stub_model

El método stub_model genera una instancia de un modelo de modelo activo.

Si bien puede usar stub_model en cualquier ejemplo (modelo, vista, controlador, ayudante), es especialmente útil para ver ejemplos, que son intrínsecamente más basados ​​en el estado que en la interacción.

mock_model

El método mock_model genera una prueba doble que actúa como un modelo de modelo activo. Esto es diferente del método stub_model que genera una instancia de una clase ActiveModel real.

El beneficio de mock_model sobre stub_model es que es un verdadero doble, por lo que los ejemplos no dependen del comportamiento (o mal comportamiento), o incluso de la existencia de cualquier otro código. Si está trabajando en una especificación de controlador y necesita un modelo que no existe, puede pasar a mock_model una cadena y el objeto generado actuará como si fuera una instancia de la clase nombrada por esa cadena.

rspec docs: stub_model y mock_model