如何使用 Cuprite 和 Webdrivers 在 rspec 特性测试中测试 react-rails 组件

How to test react-rails components in rspec feature tests using Cuprite & Webdrivers

我正在更新旧应用程序的 Ruby 和 Rails 版本,并试图让所有功能测试通过。由于仍然依赖 capybara-webit,他们中的大多数人都失败了。我已经用 webdriverscuprite 替换了它,并且修复了大约一半。尽管如此,在 运行 测试时,所有注入的反应组件(使用 react-rails)都没有被渲染(截图证明了这一点)。

我已经添加了 gem 并在我的 spec_helper.rb 文件中使用此配置:

Capybara.register_driver(:cuprite) do |app|
  Capybara::Cuprite::Driver.new(
    app, 
    window_size: [1200, 800],
    inspector: true
  )
end
Capybara.default_driver = Capybara.javascript_driver = :cuprite

我也尝试过使用 :headless_chrome 驱动程序使其工作,但效果更差。使用该配置,页面也不会呈现注入的 React 组件的 erb 父容器。我还尝试在 sleep 组件正在渲染的地方添加,但没有用。有没有办法让 React 组件通过此设置在 test 中呈现?

它们是否以开发模式呈现?如果是这样,问题很可能是两种模式之间资产处理的差异。在测试模式(和生产)中,资产被打包以减少请求的数量。这意味着一个 JS 文件中的错误可以阻止 JS 的其余部分执行。检查您的浏览器控制台是否存在 JS 错误并全部修复