规范在本地传递,但Travis CI失败

时间:2015-06-21 03:07:05

标签: ruby-on-rails ruby rspec capybara 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.rbspec_helper.rbspec/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

4 个答案:

答案 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

中删除了对turbo-links的引用

当我从一个测试切换到erb时,Travis CI只会吐出这个错误,而在我的一个测试中切换puts page.html,所以很难找到它。