Rspec+Capybara опционально меняют драйвер JS
Я использую poltergeist/phantomjs для CI, но я хочу иметь возможность при желании изменить драйвер JS на selenium для локального просмотра моих тестов. В идеале я хотел бы иметь флаг командной строки для этого полтергейста по умолчанию, но иметь возможность запустить rspec --driver=selenium (или что-то подобное)
Есть идеи?
4 ответа
Никогда не заканчивал тем, что нашел ответ для этого, так вот хакерское решение, которое я придумал:
Единственное, что я смог надежно изменить, - это система тегов. Поэтому я вызываю с помощью -t визуальный тег, а затем убираю его.
В spec/spec_helper.rb
Rspec.configure do |config|
if config.filter_manager.inclusions[:visual]
Capybara.javascript_driver = :selenium
config.filter_manager.inclusions.delete(:visual)
else
Capybara.javascript_driver = :poltergeist
end
~rest of rspec config code~
Теперь вы можете запустить свои тесты с rspec (tests to run) -t visual
Основная проблема заключается в том, что это не позволит вам запускать определенные тесты. Вы все еще можете сделать один файл с rspec spec/features/signup_spec.rb -t visual
но вы не можете добавить :54
бежать по определенному номеру строки.
Вы можете установить переменную окружения из командной строки, которую можно использовать в spec / spec_helper.rb:
DEBUG = ENV['DEBUG'] || false
if DEBUG
Capybara.default_driver = :selenium
else
Capybara.default_driver = :rack_test
Capybara.javascript_driver = :poltergeist
end
Который затем можно запустить из командной строки следующим образом:
DEBUG=true rspec spec/features/my_spec.rb:35
Это позволит вам указать конкретный номер строки.
Возможно, вам также придется изменить свою стратегию очистки в зависимости от используемого драйвера капибары (т.е. с очистителем базы данных):
RSpec.configure do |config|
config.before(:suite) do
if DEBUG
DatabaseCleaner.strategy = :truncation
else
DatabaseCleaner.strategy = :transaction
end
DatabaseCleaner.clean_with(:truncation)
end
end
Если вы хотите стать модным, вы можете объединить его с ответом stackru: /questions/830462/kak-ya-mogu-zapustit-selenium-ispolzuemyij-cherez-capybara-na-bolee-nizkoj-skorosti/830466#830466 чтобы замедлить скорость, с которой селен запускает спецификации, когда они работают в режиме отладки:
config.before(:each) do |group|
set_speed :slow if DEBUG
end
У меня есть то, что я думаю, может быть менее хакерским решением. Я в основном отрываю решение Джеффа Перрина, но делаю его менее сложным.
мой DatabaseCleaner
просто установлен, чтобы всегда использовать усечение, поэтому нет необходимости условно настраивать эту часть.
Установите свой javascript_driver
сюда:
# spec/spec_helper.rb
Capybara.javascript_driver = ENV['USE_SELENIUM_FOR_CAPYBARA'] ? :selenium : :webkit
Я не вижу необходимости устанавливать драйвер по умолчанию для Capybara, если мы всегда устанавливаем явно javascript_driver
к чему-то. (Возможно, что Джефф знает что-то об этом, что я не знаю.)
Это будет использовать Webkit в качестве драйвера, если у вас нет USE_SELENIUM_FOR_CAPYBARA
установить в вашей среде.
Конечно, вы также должны иметь гемы Selenium и Webkit в вашем Gemfile, если вы хотите, чтобы RSpec мог работать с любым драйвером.
Это решение отлично сработало для меня. Я устанавливаю переменную окружения и проверяю ее значение. Добавьте это в ваш файл spec_helper.rb
if ENV['DRIVER'] =='poltergeist' //use any driver you want to run on circlci
Capybara.default_driver = :poltergeist
URL = // use your own end point like http://www.localhost:8080
else
Capybara.default_driver = :selenium
URL = // Use your end point
end
Capybara.configure do |config|
config.app_host = URL
end
А затем на консоли запустите эту команду
DRIVER=poltergeist rspec // для запуска теста на poltergeist
rspec // для работы на селене