13

stub_modelRSpec和mock_modelin RSpec有什么区别?到目前为止,我知道存根仅用于防止调用真正的方法并返回预定义的值,而模拟实际上是期望并要求在接收者上调用该方法。

我也知道这些存根/模拟用于允许隔离测试,例如在不接触模型的控制器中。但是我仍然对这两种方法感到困惑,究竟是什么时候使用的?细节和例子将不胜感激。非常感谢!

4

1 回答 1

14

存根模型

stub_model方法生成一个活动模型模型的实例。

虽然您可以stub_model在任何示例(模型、视图、控制器、助手)中使用它,但它在视图示例中特别有用,因为它们本质上是基于状态而不是基于交互的。

模拟模型

mock_model方法生成一个类似于活动模型模型的测试替身。stub_model这与生成真实 ActiveModel 类实例的方法不同。

mock_modelover的好处stub_model是它是一个真正的双重,因此示例不依赖于行为(或错误行为),甚至不依赖于任何其他代码的存在。如果您正在处理控制器规范并且您需要一个不存在的模型,您可以传递mock_model一个字符串,生成的对象将充当该字符串命名的类的实例。

rspec 文档:stub_modelmock_model

于 2014-02-21T20:27:59.917 回答