规范在本地通过,但 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.jsrequire_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 在我的一个测试中,所以很难找到。