1

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

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

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

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

因此,对于功能测试来说,这是一种痛苦。我只提出了两个选择:

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

或者

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

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

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

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

我错过了第三种选择吗?或者是否有一些明智的方法可以在没有主要缺点的情况下执行上述任一选项?

4

1 回答 1

5

我是contentful_model.

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

干杯

于 2017-02-08T19:06:25.660 回答