假设我有一个命名小部件列表。在我的测试代码中,我想验证
widget = FactoryGirl.create(:widget)
get :index
生成一个页面,其中包含字符串#{widget.name}。
我的问题:我是将其编写为控制器测试还是集成测试?
(除了#1:这似乎超出了控制器测试的范围,因为它假设知道什么视图被渲染。但是将其作为集成测试编写感觉太重量级,因为它只需要一个请求/ response transaction。)
(除了#2之外,我的一般问题是“你如何决定控制器测试中的内容以及集成测试中的内容?”但这对于Stack Overflow问题来说可能过于宽泛。)
答案 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
那么它就是集成测试。
有关get
和visit
之间区别的更多信息,请参阅此帖子:http://blog.plataformatec.com.br/2012/06/improving-the-integration-between-capybara-and-rspec/在该帖子中,建议完全删除规范/请求并按规范替换它/ api(我称之为'请求规范')和规范/功能(我称之为'集成测试')。
无论如何请注意,我上面写的只是我个人看待这种区别的方式,其他人可能不同意。