水豚测试不起作用,而实际的应用程序可以正常工作。在Rails 5中反应前端

时间:2019-11-21 20:10:53

标签: ruby-on-rails reactjs react-rails

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

问题:我在Rails应用程序中使用react组件创建了一个调查表,该组件在开发模式下运行时可以工作。我可以单击是或否按钮,然后使用回调函数呈现新的问题文本。但是,我的硒集成测试没有做到这一点。 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。

这是我的react回调函数

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

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

1 个答案:

答案 0 :(得分:0)

现在可以根据需要使用sleep。这是我所做的更改。

1)我删除了不推荐使用的宝石chromedriver-helper,并用webdrivers代替

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

3)我更改为questionnaire = this的{​​{1}}的反应代码(在开发中未显示或未登录到chrome webdriver中)发现错误。

现在可以使用var questionnaire = this

通过集成测试