1

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

水豚驱动程序:

  • rack_test是一个小型 ruby​​ api,它与Rack(几乎所有 Ruby Web 框架底层的 Web 堆栈)一起使用 - 它不知道 javascript
  • selenium一个驱动程序来管理启用 Web 浏览器自动化的库- 它知道 Javascript,因为它实际上使物理 Web 浏览器自动化。

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

4

1 回答 1

0

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

驱动程序是 Capybara 的一部分,它实际上将网页管理为一系列 DOM 元素 - Rails 5 测试处方 - Noel Rappin。

Capybara 默认使用 rack_test 驱动程序,这是一个更快但不支持 JavaScript 的版本。Rails 系统测试默认使用较慢但支持 Javascript 的版本 selenium -认为这段代码设置了 Rails 默认值。

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

我选择 Selenium 驱动程序作为默认驱动程序,因为向 Rails 添加系统测试的目的是使初始设置绝对为零。Capybara 通过其默认设置 Rack Test 来实现这一点,但它并不能真正有效地展示系统测试的优点,因为它不支持 JavaScript 测试。 来自 Eileen 代码的 PR 中的评论

所以选择 Selenium v​​s Rack 没有技术上的理由。选择 Selenium 是因为它是功能更全面的低配置默认值。

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

如果你不想要一个完整的浏览器 - 如果你只是想在 HTML 上断言而不是仅仅执行 Javascript ......机架测试所做的基本上是伪造真实浏览器与 Capybara 可以用来解析的假浏览器之间的通信根本没有发出网络请求的响应。您可以断言页面包含的内容。

Rails conf 2018 - Sam Phippen

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

于 2020-04-13T14:29:58.560 回答