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

时间:2017-02-08 18:44:44

标签: ruby-on-rails stubbing contentful

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

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

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这样的宝石来存储每个功能规范的内容响应
    2. 这两者(至少我正在做的方式)都有相当不好的弊端:

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

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

      我错过了第三种选择吗?或者是否有一些合理的方法可以做到上述任何一种选择而不会产生主要缺点?

1 个答案:

答案 0 :(得分:5)

我是contentful_model的维护者。

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

干杯