【问题标题】:When to choose system test over integration test Rails 5.1?何时选择系统测试而不是集成测试 Rails 5.1?
【发布时间】:2017-06-22 05:22:54
【问题描述】:

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

现在的问题是:在 Rails 5.1 之前,我在集成测试中编写复杂的测试用例。但是现在我有两种选择来编写测试用例。 我可以写测试用例像

test: should create article

在集成测试中,但我也可以在系统测试中编写相同的测试用例。

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

【问题讨论】:

  • 集成测试不使用浏览器,所以无法在其中测试js。
  • 这不是选择最好的测试类型(集成或系统),而是通过测试集成测试中的行为和系统测试中的用户交互来同时使用两种类型(集成和系统)。例如,如果您想测试一条数据是否在用户单击(交互)时使用 ajax 加载,请使用 System.并使用集成测试来测试返回的数据是否符合您的预期。或者,如果您不想同时测试交互和行为,请选择最适合您的。

标签: ruby-on-rails testing capybara integration-testing acceptance-testing


【解决方案1】:

MikDiet 给出了简短的回答。如需详细答案,请查看系统和集成测试中的 documentation

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

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

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

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

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

【讨论】:

  • 所以系统测试是对功能测试的改进和替代?
  • 我不会这么说的。系统测试或多或少与 RSpec 的功能规范相当。在高层次上,它们几乎相同。在低级别上,系统测试更容易设置,现在可能更快一些,因为它们与 Rails 紧密集成。但据我所知,RSpec 计划将系统测试的 API 用于其功能规范,这将使它们完全相同,只是语法不同。
【解决方案2】:

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

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

  • 他们测试与真实屏幕的交互,而不是发出合成请求来模拟这些。
  • 它们更加现实和全面。例如,一段损坏的 Javascript 将使规范失败,而在集成测试中将被忽略。

我认为集成测试的唯一好处是速度。它们确实更快(check this experiment I made)。对我来说,速度差异并不是一个大问题,因为:

  • 我可以在我的盒子里在 2 秒内运行隔离系统测试。这对我的编码乐趣来说已经足够快了。
  • 我依靠云测试运行器来实现大型套件的并行化。

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

【讨论】:

    猜你喜欢
    • 2017-12-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-10-22
    • 1970-01-01
    • 2012-07-11
    • 2016-07-25
    • 1970-01-01
    相关资源
    最近更新 更多