Capybara 测试不起作用,而实际应用程序运行良好。 React 前端 Rails 5

Capybara tests don't work, while actual app works fine. React front-end in Rails 5

规格:Rails 5.2,Ruby 2.5.1,Yarn 1.91.1,React-Rails 2.6.0,硒-webdriver 3.14,chromedriver 77,水豚 gem 3.29,Ubuntu 18.04

问题:我在 Rails 应用程序中使用 React 组件创建了一份问卷,该应用程序在 运行 处于开发模式时有效。我可以单击是或否按钮,然后回调函数呈现新问题文本。但是我的 selenium 集成测试没有发现这一点。 page 对象对于第一个问题仍然具有相同的文本,因此我收到了这样的错误

Failure/Error: expect(question.text).to include('last question') expected "first question" to include "last question"

测试本身在 features/questionnaire.rb

中看起来像这样
 RSpec.feature "Onboarding Questionnaire", type: :feature, js:true do
 (...)
 it...
   question = find('h3.question')
   expect(question.text).to include('first question')
   yes = find('#yes')
   yes.click
   sleep 5
   question = find('h3.question')
   expect(question.text).to include('last question')

问题出现在yes.click之后。一开始我以为是我的动画导致了这个问题,但我删除了那些,它只是在我的回调函数中使用了 setState。

这是我的反应回调函数

 saveAnswer(e) {
    questionnaire = this
    ++questionnaire.state.page
    questionnaire.setState({page: questionnaire.state.page})
  } 

这是我的驱动程序配置
Capybara.javascript_driver = :selenium_chrome_headless

现在使用 sleep 可以正常工作。这是我所做的更改。

1) 我删除了已弃用的 gem chromedriver-helper 并将其替换为 webdrivers

2) 添加 require 'webdrivers' 到 rails_helper.rb 文件。

3) 在我更改为 var questionnaire = thisquestionnaire = this 的反应代码中发现错误(未在开发中显示或未登录 chrome webdriver)。 =17=]

集成测试现在使用 selenium_chrome_headless

可以顺利通过