Приложение Rails, которое использует удаленное тестирование для тестирования приложения CakePHP, работающего на виртуальной машине Vagrant Ubuntu.
Моя ОС MacOS High Sierra.
'rspec/rails'
'capybara/rails'
'capybara/mechanize'
'capybara/poltergeist'
'phantomjs'
Если я бегу rspec ./spec/features/my_tests_folder/
,
первые 2 теста в папке всегда проходят, а остальные всегда заканчиваются Capybara::Poltergeist::TimeoutError:
.
Если я выполню какие-либо тесты в этой папке по отдельности, они ВСЕ будут проходить ВСЕГДА.
Всего 7 тестовых файлов. У каждого из них есть 1 особенность с 1 сценарием. Все js: true
.
Я пытался увеличить :timeout
в Capybara.register_driver
и увеличить default_max_wait_time
в Capybara.configure
. Ни один не изменил результат.
Я также играл с Capybara.reset!
после и перед каждым тестом. Это тоже не имело значения.
Когда я запускал это с config.order = :random
, иногда 5 из 7 имели ошибки, иногда только 2 из 7. Но всегда были некоторые ошибки и некоторые ошибки. Кроме того, каждый тест был в группе ошибок как минимум один раз.
У меня заканчиваются идеи. Что может вызвать что-то подобное?
ОБНОВЛЕНИЕ (включая конфиги Capybara и Poltergeist и пример неудачного теста):
Конфиги в rails_helper.rb:
Capybara.register_driver :poltergeist do |app|
options = {
:timeout => 90, # default is 30
:js_errors => false,
:phantomjs => Phantomjs.path,
# :debug => true
}
Capybara::Poltergeist::Driver.new(app, options)
end
Capybara.register_driver :mechanize do |app|
driver = Capybara::Mechanize::Driver.new(app)
driver.configure do |agent|
agent.user_agent_alias = 'Mac Safari'
end
driver
end
Capybara.configure do |config|
config.run_server = false
config.app_host = "http://my_vm_domain.com"
config.javascript_driver = :poltergeist
config.default_driver = :mechanize
config.default_max_wait_time = 10 # default is 2
end
Пример провала теста (не провал, но получение Capybara::Poltergeist::TimeoutError:
):
require 'rails_helper'
feature 'agente visualiza estoques de um passeio', js: true do
scenario 'com sucesso' do
agente_log_in
visit '/roteiro/show/723'
find(:partial_href, 'new_passeio/723').click
select 'Passeio Teste', from: 'passeio_produto'
fill_in 'passeio_data', with: '11/11/2017'
within('button#estoque_controls_0') do
within('div#estoque_0_hora') do
expect(page).to have_content('07:30')
end
within('span#estoque_0_vagas') do
expect(page).to have_content('3')
end
end
within('button#estoque_controls_1') do
within('div#estoque_1_hora') do
expect(page).to have_content('10:00')
end
within('span#estoque_1_vagas') do
expect(page).to have_content('5')
end
end
end
end
Код из agente_log_in.rb
в папке поддержки:
def agente_log_in
Capybara.app_host = "http://my_vm_domain.com"
visit '/usuario/logout'
visit '/'
fill_in 'data[AdmUsuario][usuario]', with: 'agente'
fill_in 'data[AdmUsuario][senha]', with: 'pa$$w0rd'
click_on 'Entrar'
end
Код для этого :partial_href
найти:
module Selectors
Capybara.add_selector(:partial_href) do
xpath {|href| XPath.descendant[XPath.attr(:href).contains(href)] }
end
end
Все в порядке с другими тестами, которые находятся в других папках приложения. Они также в порядке, если я запускаю тесты в этой папке по отдельности. Кажется, проблема возникает только тогда, когда я запускаю ЭТУ конкретную папку в целом.