在功能规范中存根内容模型实例的好方法是什么?

What's a good way to stub Contentful Model instances in feature specs?

(我认为这个问题概括为存根任何广泛的 ping API,但我是根据我实际使用的代码问这个问题)

我们在控制器和视图(包括布局)中广泛使用 Contentful Model。这意味着在我们访问(比如)主页的任何功能测试中,我们的控制器操作将包括如下内容:

class HomepageController < ApplicationController
  def homepage
    # ... other stuff
    @homepage_content = Homepage.find ('contentful_entry_id')
  end
end

... 其中主页是 ContentfulModel::Base 的子类,@homepage_content 将在视图中对其进行各种调用(有时是链接的)。在页脚中有一个类似的实例变量集并重复使用。

所以对于功能测试来说这是一个痛苦。我只有两个选择:

  1. 存根所有 Contentful 模型实例上的每个调用(数十个),存根方法链或确保它们 return 合适的模拟

  1. 使用像 VCR 这样的 gem 来存储每个功能规范的 Contentful 响应

这两种方法(至少我是这样做的)都有非常糟糕的缺点:

1) 导致每次我们在相关模型中添加或删除字段时都必须更新一堆测试代码;

2) 意味着我们为每个功能测试生成一个 vcr yaml 文件 - 并且我们必须记住在我们更改测试的元素时清除相关的 yml 文件,这会改变它发送的请求

我是否缺少第三个选项?或者是否有一些明智的方法来执行上述任一选项而不会出现主要缺点?

我是 contentful_model 的维护者。

我们使用 VCR 来存根 API 调用,以便您可以使用真实数据进行测试,避免复杂的测试代码。

干杯