验证响应的内容:是控制器测试还是集成测试?

时间:2012-09-18 06:22:38

标签: ruby-on-rails-3 unit-testing rspec integration-testing

假设我有一个命名小部件列表。在我的测试代码中,我想验证

widget = FactoryGirl.create(:widget)
get :index

生成一个页面,其中包含字符串#{widget.name}。

我的问题:我是将其编写为控制器测试还是集成测试?

(除了#1:这似乎超出了控制器测试的范围,因为它假设知道什么视图被渲染。但是将其作为集成测试编写感觉太重量级,因为它只需要一个请求/ response transaction。)

(除了#2之外,我的一般问题是“你如何决定控制器测试中的内容以及集成测试中的内容?”但这对于Stack Overflow问题来说可能过于宽泛。)

2 个答案:

答案 0 :(得分:1)

有时我认为Stack Overflow应该授予RTFM徽章,我应该是第一个接收它的人之一!

挖掘更多,我发现RSpec支持专门用于测试渲染内容的“视图规范” - 这正是我原来的问题所在。

测试以spec / views /编写。 Documentation and examples can be found here,但请务必查看当前版本RSpec的文档。

答案 1 :(得分:0)

我不认为对这些不同类别的测试有任何普遍认可的定义,但我个人称之为“请求规范”,这是一种集成测试,但只涉及单个请求/响应周期。它显然不仅仅是一个控制器测试,因为它涉及MVC架构的所有元素。另一方面,你没有点击,然后找到按钮,点击它们等等,所以这不是我通常认为的“集成测试”。

区分我称之为“请求规范”和您通常称之为“集成测试”的一种简单方法是使用get(来自ActionDispatch)vs visit(来自capybara) 。如果您仅使用get(以及post等),那么这是一个请求规范。如果你正在使用visit那么它就是集成测试。

有关getvisit之间区别的更多信息,请参阅此帖子:http://blog.plataformatec.com.br/2012/06/improving-the-integration-between-capybara-and-rspec/在该帖子中,建议完全删除规范/请求并按规范替换它/ api(我称之为'请求规范')和规范/功能(我称之为'集成测试')。

无论如何请注意,我上面写的只是我个人看待这种区别的方式,其他人可能不同意。