Спецификации проходят локально, но не для 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
Ответы
Ответ 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 может использовать...