ruby-on-rails - tests - rspec rails 5
Cuál es la diferencia entre simulacro y mock_model en RSpec (2)
Recientemente me encontré con diferentes tutoriales, donde las personas usan funciones mock
y mock_model
.
En el tutorial RSpec para controladores usan la función mock_model
, pero justo en la documentación de RSpec , solo hay una función mock
, pero no mock_model
Traté de realizar algunas pruebas yo mismo, y no encontré ninguna diferencia real, ya que todo estaba bien cuando usaba cualquiera de esas dos funciones, entonces ¿hay alguna diferencia?
Como dijo jenger mock_model es una extensión construida para el registro activo:
Esta es la fuente en 1.2.6:
def mock_model(model_class, options_and_stubs = {})
id = options_and_stubs[:id] || next_id
options_and_stubs = options_and_stubs.reverse_merge({
:id => id,
:to_param => id.to_s,
:new_record? => false,
:errors => stub("errors", :count => 0)
})
m = mock("#{model_class.name}_#{id}", options_and_stubs)
m.__send__(:__mock_proxy).instance_eval <<-CODE
def @target.as_new_record
self.stub!(:id).and_return nil
self.stub!(:to_param).and_return nil
self.stub!(:new_record?).and_return true
self
end
def @target.is_a?(other)
#{model_class}.ancestors.include?(other)
end
def @target.kind_of?(other)
#{model_class}.ancestors.include?(other)
end
def @target.instance_of?(other)
other == #{model_class}
end
def @target.class
#{model_class}
end
CODE
yield m if block_given?
m
end
Así que es bastante dulce, pero
- archiva la identificación con la siguiente en una secuencia
- talones to_param
- stubs new_record? con falso
- stubs errors así que piensa que no hay errores
También amplía la instancia del modelo con muchas cosas.
De: Ayudantes útiles para los simulacros de RSpec
En primer lugar,
mock_model
define automáticamente identificadores únicos para los modelos que se crearon con él. En segundo lugar, define los métodosto_param
(devuelve la representación de cadena de la identificación) ynew_record?
(devuelve falso).