使用rspec最佳实践进行Rails视图/控制器测试

对于控制器测试,Rails建议检查HTTP响应,身份validation,分配,会话和Flash消息等内容。 但是在我现在正在使用的应用程序中,我看到很多带有response.body.should has_tag()的Rspec测试,据我所知,它最适合于视图测试。

我想知道的是:

这种不理想的测试方式是否有相当大的性能/其他类型的惩罚?

如果要在控制器中渲染视图,这将使控制器测试花费更多时间。 这一切都取决于你是否认为测试视图元素的存在是否值得(这会使你的测试更加脆弱)。 如果这样做,那么在控制器规范中执行此操作会使其更容易,因为您不必写出单独的视图规范文件。

如果你想在你的视图上测试很多东西,那么你可能想要编写单独的视图规范。 分离视图规范可能会使测试套件的总运行时间增加。 但是,出于调试目的,可以清楚地看到视图中的某些内容是否与分离出来的控制器有关。

我怀疑大多数Rails程序员不会编写视图规范。 相反,他们可能依靠他们的集成测试(Capybara +/- Cucumber)来测试他们的观点。 但是,集成测试比unit testing需要更多时间。 RSpec书为编写单独的视图规范提供了以下参数:

查看规范为我们提供了从控制器和模型中发现我们需要的API的机会。 当API遵循大多数标准约定时,这没有那么有价值。 然而,当我们偏离它们时,价值会增加……

真正了解它们[查看测试]的好处的唯一方法是学会写好它们。 只有当您真正理解它们如何适应流程时,您才能够就是否以及何时使用它们做出明确的决定。