我编写了一些功能规范来测试通过我的rails应用程序登录,并且规范都在本地传递,但是当Travis CI运行它们时它们会失败。这是一个例子:
1) User Registration User signs up with valid credentials
Failure/Error: fill_in 'Username', with: 'dannnnneh'
Capybara::ElementNotFound:
Unable to find field "Username"
# ./spec/features/registrations_controller_spec.rb:8:in `block (2 levels) in <top (required)>'
我在common build problems for Travis CI上阅读使用Capybara.default_wait_time = 15
;但是,我要么把它放在错误的地方,要么它不起作用。
示例规范:
scenario 'User signs up with valid credentials' do
Capybara.default_wait_time = 15
visit '/users/sign_up'
fill_in 'Username', with: 'dannnnneh'
...
编辑:
我也尝试将Capybara.default_wait_time = 15
放入rails_helper.rb
,spec_helper.rb
,spec/support/capybara.rb
。
由于this SO问题,我还在.travis.yml
添加了以下内容。
script:
- xvfb-run bundle exec rspec spec/features/*.rb
然而,这也不起作用。
有谁知道问题可能是什么或如何修复它?
编辑:
这是我的spec_helper.rb
:
require 'simplecov'
SimpleCov.start
require 'capybara'
require 'capybara/poltergeist'
Capybara.javascript_driver = :poltergeist
Capybara.register_driver :poltergeist do |app|
Capybara::Poltergeist::Driver.new(app, timeout: 15)
end
RSpec.configure do |config|
config.expect_with :rspec do |expectations|
expectations.include_chain_clauses_in_custom_matcher_descriptions = true
end
config.mock_with :rspec do |mocks|
mocks.verify_partial_doubles = true
end
end
答案 0 :(得分:2)
你能发布你的spec_helper吗?另外,官方文档提供了另一种配置xvfb的方法,您检查了http://docs.travis-ci.com/user/gui-and-headless-browsers/吗?
答案 1 :(得分:2)
你有一些问题或其他问题,但没有调试输出,所以很难分清楚是什么问题。我会通过改变你的测试来逐个消除问题,为你提供输出。您可以拥有以下其中一项(或其他内容):
尝试添加验证您所在页面的步骤:
expect(current_path).to eq '/users/sign_up'
或尝试添加打印出页面HTML的步骤。
puts page.html
或者如果不是......
fail page.html
你应该找到一些有用的东西来告诉你为什么你看不到你要填写的输入。
答案 2 :(得分:2)
检查TrevisCI是否可以创建测试数据库。
为了与Travis CI合作,我必须创建TravisCI可以使用的public test DB
......
答案 3 :(得分:0)
travis CI失败的原因是require_tree
中的application.js
存在问题。如果require_tree
引用的目录为空,则一切都会中断。我找到了三种解决方案。
1)将.keep
文件添加到正确的目录
2)删除require_tree
语句及其使用的任何内容
3)删除使用require_tree
语句的任何内容。
就我而言,导致问题的是turbo-links。我计划实现前端框架,因此我在application.html.slim
当我从一个测试切换到erb时,Travis CI只会吐出这个错误,而在我的一个测试中切换puts page.html
,所以很难找到它。