【问题标题】:Rails system test drivers can I still use rack_test?Rails 系统测试驱动程序我还能使用 rack_test 吗?
【发布时间】:2020-04-13 14:29:58
【问题描述】:

Rails 系统测试使用 Capybara。 Capybara 默认使用rack_test驱动,而系统测试默认使用selenium

水豚司机:

我想知道为什么选择这些,以及对于编写系统测试的 Rails 程序员来说,什么是明智的选择。

【问题讨论】:

  • Selenium 是浏览器自动化软件,用于通过驱动实际浏览器(无头或无头)来测试应用程序。 rack_test 只是通过使用解析器抓取 HTML 来模拟浏览器。 rack_test 因此不能使用 test 来测试 JavaScript 或任何真实的浏览器行为。当然rack_test 更快。它只做实际浏览器工作的 1/100。
  • 是的,在某些极端情况下,即使您不测试 javascript,实际浏览器和机架测试也会有所不同,因此您的结论有点荒谬。如果权衡是值得的,请使用 rack_test,但不要自欺欺人地认为它们在任何方面都是平等的。
  • 我认为标题是错误的。这给人的印象是两人之间的对决。当它真的是“我可以仍然在系统测试中使用 rack_test” 最初的结论给出了一个冷淡的“如果你的系统测试没有使用 Javascript,你可以考虑使用 rack_test。” - 我希望并没有使人们得出驱动程序相同的结论-但是,我现在强调它们是不同的。希望这能解决您的问题?

标签: ruby-on-rails selenium rack-test


【解决方案1】:

系统测试使用 Capybara 运行。 Capybara 使用驱动程序来完成测试。 Capybara驱动可以定义为:

驱动是Capybara中实际管理网页的部分 作为一系列 DOM 元素 - Rails 5 测试处方 - Noel Rappin。

Capybara uses by default a rack_test driver, a faster but JavaScript unaware version.Rails system tests uses by default, a slower but Javascript aware version, selenium - think this code sets the Rails default.

我想知道默认的原因以及我是否仍然可以使用rack_test。我从原始 PR 中找到了一个引用:

我选择 Selenium 驱动程序作为默认驱动程序,因为 向 Rails 添加系统测试的目的是为了初始设置 绝对为零。 Capybara 通过他们的默认设置 Rack 做到这一点 测试,但这并不是真正有用的证明 系统测试,因为它不支持 JavaScript 测试。 Comment in PR from Eileen codes

因此,选择 Selenium 与 Rack 没有技术上的理由。选择 Selenium 是因为它是功能更全面的低配置默认值。

机架测试是有限的,它被描述为:

如果您不想要完整的浏览器 - 如果您只想在 HTML 上断言 而不是仅仅执行 Javascript ... rack test 所做的是 基本上伪造了真实浏览器与虚假浏览器之间的通信 Capybara 可以使用它来解析响应而无需创建网络 请求。您可以断言页面包含的内容。

Rails conf 2018 - Sam Phippen

如果您的系统测试没有使用 Javascript,您可以考虑改用 rack_test。但是,这是一个折衷方案 - rack 会更快,因为它不了解 Javascript,但它无法替代物理浏览器的复杂性。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-03-09
    • 2014-06-18
    • 2015-03-06
    • 1970-01-01
    • 1970-01-01
    • 2018-08-21
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多