RSpec中stub_model
和mock_model
之间有什么区别?到目前为止,我知道存根用于阻止实际方法被调用并返回预定义值,而模拟实际上是期望并要求在接收器上调用该方法。
我也知道这些存根/模拟用于允许隔离测试,例如在控制器中不触及模型。但我仍然对这两种方法感到困惑,究竟每种方法都使用了吗?非常感谢细节和例子。非常感谢!
答案 0 :(得分:12)
stub_model
方法生成活动模型模型的实例。虽然您可以在任何示例(模型,视图,控制器,帮助器)中使用
stub_model
,但它在视图示例中特别有用,它们本质上比基于交互的状态更基于状态。
mock_model
方法生成测试双,其作用类似于活动模型 模型。这与生成真实ActiveModel类的实例的stub_model
方法不同。
mock_model
优于stub_model
的好处是它是一个真正的双重,因此示例不依赖于行为(或错误行为),甚至不依赖于任何其他代码的存在。 如果您正在处理控制器规范并且需要一个不存在的模型,则可以传递mock_model
一个字符串,生成的对象就像它是该字符串所指定的类的实例一样。 / p>
rspec docs:stub_model和mock_model