对于控制器测试,Rails建议检查HTTP响应,身份验证,分配,会话和Flash消息等内容.但是在我现在正在使用的应用程序中,我看到很多带有response.body.should has_tag()的Rspec测试,据我所知,理想情况下它适用于视图测试.
我想知道的是:
这种不理想的测试方式是否有相当大的性能/其他类型的惩罚?
解决方法
如果您在控制器中渲染视图,这将使您的控制器测试花费更多时间.这完全取决于您是否认为测试视图元素的存在是否值得(这会使您的测试更加脆弱).如果这样做,那么在控制器规范中执行此操作会使其更容易,因为您不必编写单独的视图规范文件.
如果你想在你的视图上测试很多东西,那么你可能想要编写单独的视图规范.分离视图规范可能会使测试套件的总运行时间增加.但是,出于调试目的,可以清楚地看到视图中的某些内容是否与分离出来的控制器有关.
我怀疑大多数Rails程序员不会编写视图规范.相反,他们可能依靠他们的集成测试(Capybara / – Cucumber)来测试他们的观点.但是,集成测试比单元测试需要更多时间. RSpec书为编写单独的视图规范提供了以下参数:
View specs provide us with an opportunity to discover APIs that we need from the controllers and models. This is not that valuable when the APIs are following the most standard conventions. The value increases,however,as we stray from them….
The only way to really get a feel for the benefits of them [view tests] is to learn to write them well. And only once you really understand how they fit in the flow are you going to be able to make well-grounded decisions about if and when to use them.