2013-08-29 4 views
5

Я использую poltergeist/phantomjs для CI, но я хочу, чтобы иметь возможность поменять драйвер JS на селен, чтобы наблюдать за моими тестовыми запусками локально. В идеале я хотел бы иметь флаг командной строки для этого полтергейста по умолчанию, но иметь возможность запускать rspec --driver = selenium (или что-то подобное)Rspec + Capybara по желанию изменить драйвер JS

Любые идеи?

ответ

0

Никогда в конечном итоге найти ответ на это, так вот Hacky решение, которое я придумал:

Единственное, что я обнаружил, что я мог бы надежно изменить была система мечения. Поэтому я вызываю использование -t визуального тега, а затем убираю его.

В спецификации/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 для запуска по определенному номеру строки.

+0

Нет, вы действительно можете добавить номер строки ': 54' для запуска определенного теста, по крайней мере, в 2015 году и 2016 году, но я не могу вспомнить, возможно ли это в 2014 году. – Aleks

0

Вы можете установить переменные окружения из командной строки, которая может быть использована в спецификации/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 

Если вы хотите получить фантазии, вы можете объединить его с этим StackOverflow ответ : https://stackoverflow.com/a/5150855/95683, чтобы замедлить скорость, на которой работает селен спецификации, когда они работают в режиме DEBUG:

config.before(:each) do |group| 
    set_speed :slow if DEBUG 
end 
0

у меня есть то, что я думаю, что может быть менее Hacky решение. Я в основном срывал решение Джеффа Перрена, но делал его менее сложным.

My DatabaseCleaner только что установлен, чтобы всегда использовать усечение, поэтому нет необходимости условно настраивать эту часть.

Установите javascript_driver таким образом:

# spec/spec_helper.rb 

Capybara.javascript_driver = ENV['USE_SELENIUM_FOR_CAPYBARA'] ? :selenium : :webkit 

Я не вижу никакой необходимости устанавливать драйвер Капибара по умолчанию, если мы всегда явно устанавливая javascript_driver к чему-то. (Возможно, Джефф знает кое-что об этом, чего я не знаю.)

Это будет использовать Webkit в качестве драйвера, если у вас нет USE_SELENIUM_FOR_CAPYBARA, установленного в вашей среде.

Разумеется, в вашем Gemfile также должны быть как драйверы Selenium, так и Webkit, если вы хотите, чтобы RSpec мог работать с любым из драйверов.

0

Это решение отлично сработало для меня. Я устанавливаю переменную среды и проверяю ее значение. Добавьте к этому файлу 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 = полтергейст Rspec // для запуска теста на полтергейста

RSpec // для работы на селен