Подтвердить что ты не робот

Спецификации проходят локально, но не для 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)>'

Я прочитал общие проблемы сборки для Travis CI для использования Capybara.default_wait_time = 15; однако я либо помещаю это в неправильное место, либо не работает.

Пример spec:

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.

Я также добавил следующее к .travis.yml из-за этого вопроса SO.

script:
    - xvfb-run bundle exec rspec spec/features/*.rb

Однако это тоже не сработало.

Кто-нибудь знает, какой может быть проблема или как ее исправить?

EDIT:

Вот мой 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
4b9b3361

Ответ 1

Причина, по которой travis CI терпит неудачу, вызвана проблемой с require_tree в application.js. Если каталог, на который ссылается require_tree, пуст, тогда все ломается. Есть три решения, которые я нашел.

1) Добавьте файл .keep в соответствующий каталог

2) Удалите оператор require_tree и все, что его использует

3) Удалите все, что используется с помощью инструкции require_tree.

В моем случае это были проблемы с турбо-ссылками. Я планирую реализацию интерфейсной структуры, поэтому я удалил ссылку на турбо-ссылки в application.html.slim

Travis CI только выплюнул эту ошибку, когда я переключился с slim на erb и puts page.html в один из моих тестов, поэтому было трудно отследить.

Ответ 2

Можете ли вы разместить свой spec_helper? Кроме того, официальная документация предлагает другой способ настройки xvfb, вы проверили http://docs.travis-ci.com/user/gui-and-headless-browsers/?

Ответ 3

У вас есть проблема или нет, но нет отладочной информации, поэтому трудно сказать, что случилось. Я бы устранил проблемы один за другим, изменив ваши тесты, чтобы дать вам этот вывод. У вас может быть одно из следующих (или что-то еще):

  • Возможно, вы не находитесь на правильной странице, потому что сбой навигации не был
  • У вас может не быть ничего на странице, кроме сообщения об ошибке
  • У вас может быть что-то еще на странице, которая закрывает поле имени пользователя

Попробуйте добавить шаг, который проверяет вашу страницу:

expect(current_path).to eq '/users/sign_up'

Или попробуйте добавить шаг, который выводит HTML для страницы.

puts page.html

или если нет...

fail page.html

Вы должны найти что-то полезное, чтобы рассказать вам, почему вы не видите вход, который хотите заполнить.

Ответ 4

Проверьте, может ли TrevisCI создать тестовую БД. Для работы с Travis CI мне пришлось создать public test DB, который TravisCI может использовать...