规范在本地通过,但 Travis CI 失败
Specs pass locally, but fail for Travis CI
我写了一些功能规范来测试通过我的 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
你能 post 你的 spec_helper 吗?此外,官方文档建议另一种配置 xvfb 的方法,你检查过 http://docs.travis-ci.com/user/gui-and-headless-browsers/ ?
您遇到了一些问题,但没有调试输出,因此很难判断哪里出了问题。我会通过改变你的测试来给你那个输出来一个一个地消除问题。您可以拥有以下其中一项(或其他):
- 您可能不在正确的页面上,因为导航失败
- 页面上可能没有任何内容,只有一条错误消息
- 您的页面上可能有其他内容覆盖了用户名字段
尝试添加验证您所在页面的步骤:
expect(page).to have_current_path('/users/sign_up')
或者尝试添加一个打印页面 HTML 的步骤。
puts page.html
或者如果不是...
fail page.html
你应该找到一些有用的东西来告诉你为什么看不到你要填写的输入。
检查 TrevisCI 是否可以创建测试数据库。
为了与 Travis CI 一起工作,我必须创建 TravisCI 可以使用的 public test DB
...
travis CI 失败的原因是 application.js
中 require_tree
的问题。如果 require_tree
引用的目录是空的,那么一切都会中断。我找到了三个解决方案。
1) 添加一个.keep
文件到正确的目录
2) 删除 require_tree
语句以及使用它的任何内容
3) 删除使用 require_tree
语句的所有内容。
就我而言,是 turbo-links 导致了问题。我计划实现一个前端框架,所以我删除了 application.html.slim
中对 turbo-links 的引用
Travis CI 只有在我从 slim 切换到 erb 时才吐出这个错误,puts page.html
在我的一个测试中,所以很难找到。
我写了一些功能规范来测试通过我的 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
你能 post 你的 spec_helper 吗?此外,官方文档建议另一种配置 xvfb 的方法,你检查过 http://docs.travis-ci.com/user/gui-and-headless-browsers/ ?
您遇到了一些问题,但没有调试输出,因此很难判断哪里出了问题。我会通过改变你的测试来给你那个输出来一个一个地消除问题。您可以拥有以下其中一项(或其他):
- 您可能不在正确的页面上,因为导航失败
- 页面上可能没有任何内容,只有一条错误消息
- 您的页面上可能有其他内容覆盖了用户名字段
尝试添加验证您所在页面的步骤:
expect(page).to have_current_path('/users/sign_up')
或者尝试添加一个打印页面 HTML 的步骤。
puts page.html
或者如果不是...
fail page.html
你应该找到一些有用的东西来告诉你为什么看不到你要填写的输入。
检查 TrevisCI 是否可以创建测试数据库。
为了与 Travis CI 一起工作,我必须创建 TravisCI 可以使用的 public test DB
...
travis CI 失败的原因是 application.js
中 require_tree
的问题。如果 require_tree
引用的目录是空的,那么一切都会中断。我找到了三个解决方案。
1) 添加一个.keep
文件到正确的目录
2) 删除 require_tree
语句以及使用它的任何内容
3) 删除使用 require_tree
语句的所有内容。
就我而言,是 turbo-links 导致了问题。我计划实现一个前端框架,所以我删除了 application.html.slim
Travis CI 只有在我从 slim 切换到 erb 时才吐出这个错误,puts page.html
在我的一个测试中,所以很难找到。