2012-09-12 14 views
13

¿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 son realmente expectativas y requieren que el método sea llamado en el receptor.¿Cuál es la diferencia entre stub_model y mock_model en RSpec?

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!

+0

No estoy seguro si esto se aplica a su pregunta, pero una cosa útil para mí fue darse cuenta de que rspec "se burla" eran para la creación de objetos falsos mientras que los "talones" eran para la creación de métodos falsos . Tenga en cuenta que no estoy hablando de 'stub_model' o' mock_model' sino de los términos más genéricos de simulacro y stub. – Dty

Respuesta

11

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 en ejemplos de vista, que son inherentemente más basados ​​en estado que basados ​​en interacción.

mock_model

El método mock_model genera una prueba doble que actúa como un modelo activo Modelo . 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 mock_model una cadena y el objeto generado actuará como si fuera una instancia de la clase nombrada por esa cadena.

docs rspec: stub_model y mock_model

Cuestiones relacionadas