![](/img/trans.png)
[英]How should I approach adding a react front-end to a web app built with rails?
[英]Capybara tests don't work, while actual app works fine. React front-end in Rails 5
Specs : 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 应用程序中使用反应组件创建了一份问卷,该应用程序在开发模式下运行时有效。 我可以单击是或否按钮,然后回调 function 呈现新的问题文本。 但是我的 selenium 集成测试并没有选择这个。 object 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
之后。 起初我以为是我的动画导致了这个问题,但我删除了这些,它只是在我的回调 function 中使用了 setState。
这是我的反应回调 function
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) 在 rails_helper.rb 文件中添加了require 'webdrivers'
。
3)在我的react代码中发现错误(未显示在开发中或未登录chrome webdriver)的questionnaire = this
我更改为var questionnaire = this
。
现在使用selenium_chrome_headless
可以很好地通过集成测试
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.