У меня есть рабочие интеграционные / функциональные тесты с использованием Rails 4, rspe c -rails 3.6 и capybara 2.18. Я пытаюсь заставить эти тесты проходить на страницах, которые переписываются в javascript framework (React). Для этого мне нужно использовать драйвер, такой как Poltergeist, вместо браузера без заголовка по умолчанию, чтобы javascript мог работать на тестовых страницах.
Я установил poltergeist 1.18. Я добавляю Capybara.javascript_driver = :poltergeist
, нет проблем. Тесты проходят со старыми (html -только) страницами.
Однако просто , добавляя js: true
к существующему работающему тесту (то есть до изменения отображаемой страницы на новая версия), и тест завершается неудачно с
Request to 'http://account.example.com/user/sessions/new' failed to reach server, check DNS and/or server status
Обратите внимание, что этот URL использует субдомен account
в нашем приложении, и это может быть связано с проблемой.
Вот один из неудачных тестов, изолированный.
feature 'Vistor tries to login', js: true do
scenario 'with valid login', :with_project_access_user do
visit new_user_sessions_url
fill_in 'user_session[login]', with: 'test@gmail.com'
fill_in 'user_session[password]', with: 'mysweetpassword'
click_button 'Log In'
expect(current_url).to match('http://account\.')
end
end
В первой строке он не проходит: visit new_user_sessions_url
. Этот тест проходит, если я удаляю js" true
. В обоих случаях new_user_sessions_url
- это "http://account.example.com/user/sessions/new"
Использование new_user_sessions_path
вместо new_user_sessions_url
здесь не работает, поскольку поддомен является обязательной частью маршрута. Если существует способ сопоставления поддоменов (без удаления поддоменов - они используются в нашем производственном приложении), это вполне приемлемое решение.
Поскольку тест работает без js: true
, я должен предположить, что Capybara делает что-то негласное для обработки домена example.com
. Но как добавление js: true
сломает это? И как я могу это исправить, чтобы мои существующие тесты прошли?