对于控制器测试,Rails建议检查HTTP响应,身份验证,分配,会话和Flash消息等内容。但是在我现在正在使用的应用程序中,我看到很多带有response.body.should has_tag()的Rspec测试,据我所知,它最适合于视图测试。
我想知道的是:
这种不理想的测试方式是否有相当大的性能/其他类型的惩罚?
答案 0 :(得分:10)
如果要在控制器中渲染视图,这将使您的控制器测试花费更多时间。这完全取决于您是否认为测试视图元素的存在是否值得(这会使您的测试更加脆弱)。如果你这样做,那么在控制器规范中进行操作会更容易,因为你不必写出单独的视图规范文件。
如果您想在视图上测试很多内容,那么您可能希望编写单独的视图规范。分离视图规范可能会使测试套件的总运行时间增加。但是,出于调试目的,可以清楚地看到视图中的某些内容是否与分离出来的控制器有关。
我怀疑大多数Rails程序员不会编写视图规范。相反,他们可能依靠他们的集成测试(Capybara +/- Cucumber)来测试他们的观点。但是,集成测试比单元测试需要更多时间。 RSpec书为编写单独的视图规范提供了以下参数:
查看规范为我们提供了从控制器和模型中发现我们需要的API的机会。当API遵循大多数标准约定时,这没有那么有价值。然而,当我们偏离它们时,价值会增加......
真正了解他们[查看测试]的好处的唯一方法是学会写好。只有当您真正理解它们如何适应流程时,您才能够就是否以及何时使用它们做出明确的决定。