Ruby on rails 什么时候选择系统测试而不是集成测试Rails 5.1?

Ruby on rails 什么时候选择系统测试而不是集成测试Rails 5.1?,ruby-on-rails,testing,capybara,integration-testing,acceptance-testing,Ruby On Rails,Testing,Capybara,Integration Testing,Acceptance Testing,随着Rails 5.1的发布,它们包括了系统测试。这意味着我们也可以在Rails中测试JavaScript。 《我看Rails指南》以两种方式解释了创建文章的示例测试:通过系统测试和通过集成测试 现在的问题是:在Rails5.1之前,我在集成测试中编写复杂的测试用例。但是现在我有两个选项来编写测试用例。 我可以像这样编写测试用例 test: should create article 在集成测试中,但我也可以在系统测试中编写相同的测试用例 那么我应该在什么时候选择系统测试来编写测试用例,什么时

随着Rails 5.1的发布,它们包括了系统测试。这意味着我们也可以在Rails中测试JavaScript。 《我看Rails指南》以两种方式解释了创建文章的示例测试:通过系统测试和通过集成测试

现在的问题是:在Rails5.1之前,我在集成测试中编写复杂的测试用例。但是现在我有两个选项来编写测试用例。 我可以像这样编写测试用例

test: should create article
在集成测试中,但我也可以在系统测试中编写相同的测试用例


那么我应该在什么时候选择系统测试来编写测试用例,什么时候选择集成测试呢?

MikDiet给出了简短的答案。要获得详细答案,请查看on system and integration tests

系统测试允许在真实浏览器或无头驱动程序中运行测试,以测试用户与应用程序的完整交互

一个快速的经验法则是,所有与Javascript交互的测试都需要作为系统测试运行。但是您也可以使用它们来测试响应性布局,因为您可以指定浏览器的屏幕大小

集成测试用于测试应用程序的各个部分如何交互。它们通常用于测试应用程序中的重要工作流

集成测试是不同的,因为它们不是通过浏览器运行的。它们仍然允许您与结果页面的HTML交互,但请记住,您使用的是静态输出


在集成测试中,您主要关注的是控制器动作的行为,而不是用户看到的和与之交互的内容。这部分文档可能会帮助您了解集成测试的全部内容:.

TL;DR:我会在今天启动的任何应用程序中进行系统测试,而不是集成测试。集成测试的唯一优势是速度

我认为系统测试比集成测试有两大优势:

  • 他们测试与真实屏幕的交互,而不是提出模拟屏幕的合成请求
  • 它们更加现实和全面。例如,一段破损的Javascript将导致规范失败,而在集成测试中它将被忽略
我认为集成测试的唯一好处是速度。它们确实快得多()。对我来说,速度差不是什么大问题,因为:

  • 我可以在我的盒子里的2秒内运行隔离系统测试。这是足够快的反馈给我的编码幸福
  • 对于大型套件,我依赖于并行化的云测试运行程序

我认为本地和云的速度以及并行化在今天已经足够好了,而且只会随着时间的推移变得更好。因此,我认为,如果你现在开始一个新的应用程序,系统测试是一个更安全的选择。

集成测试不使用浏览器,因此你不能在其中测试js。这不是选择最好的测试类型(集成或系统),而是同时使用这两种类型(集成和系统)通过在集成测试中测试行为和在系统测试中测试用户交互。例如,如果您想测试在用户单击(交互)时是否使用ajax加载了一段数据,请转到系统。并进行集成测试,以测试返回的数据是否符合预期。或者,如果你不想同时测试交互和行为,就选择一个最适合你的。那么,系统测试是功能测试的改进和替代?我不会这么说。系统测试或多或少等同于RSpec的功能规格。在高层次上,它们几乎是一样的。在较低的层次上,系统测试更容易设置,现在可能更快,因为它们与Rails紧密集成。但据我所知,RSpec计划将系统测试的API用于它们的特性规范,这将使它们完全相同,只是语法不同。