(我认为这个问题概括为截除任何扩展的API,但我问这个问题是基于我实际使用的代码)
我们在控制器和视图中广泛使用Contentful Model,包括在布局中。这意味着,在我们访问(比如)主页的任何功能测试中,我们的控制器操作都会包括这样的内容:
class HomepageController < ApplicationController
def homepage
# ... other stuff
@homepage_content = Homepage.find ('contentful_entry_id')
end
end
其中Homepage是ContentfulModel::Base的子类,@Homepage_content在视图中会对其进行各种调用(有时是链接的)。在页脚中有一个类似的实例变量集并重复使用。
因此,对于功能测试来说,这是一种痛苦。我只想出了两个选择:
- 对所有Contentful模型实例上的每一个调用(几十个)进行存根,并存根方法链或确保它们返回合适的mock
或
- 使用类似宝石的VCR来存储每个功能规范的Contentful响应
这两种方法(至少我这样做)都有非常糟糕的缺点:
1) 导致了一堆测试kruft,每次我们从相关模型中添加或删除字段时都必须更新这些测试;
2) 这意味着我们为每个功能测试生成一个vcr-yaml文件,并且每当我们更改测试的一个元素时,我们必须记住清除相关的yml文件,该元素将更改它发送的请求
我错过了第三个选择吗?或者,有没有一些明智的方法可以在不出现主要缺点的情况下实现上述任何一种选择?
我是contentful_model
的维护者。
我们使用VCR来存根API调用,这样您就可以使用真实数据进行测试,避免复杂的测试代码。
干杯