系统测试使用 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 vs Rack 没有技术上的理由。选择 Selenium 是因为它是功能更全面的低配置默认值。
机架测试是有限的,它被描述为:
如果你不想要一个完整的浏览器 - 如果你只是想在 HTML 上断言而不是仅仅执行 Javascript ......机架测试所做的基本上是伪造真实浏览器与 Capybara 可以用来解析的假浏览器之间的通信根本没有发出网络请求的响应。您可以断言页面包含的内容。
Rails conf 2018 - Sam Phippen
如果您的系统测试没有使用 Javascript,您可以考虑rack_test
改用。然而,这是一个折衷方案 - rack 会更快,因为它不了解 Javascript,但它不能替代物理浏览器的复杂性。