繁体   English   中英

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

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM