2013-08-29 7 views
5

Używam poltergeist/phantomjs dla CI, ale chcę opcjonalnie zmienić sterownik JS na selen, aby obejrzeć lokalnie moje testy. Idealnie chciałbym mieć flagę linii poleceń dla tego domyślnego poltera, ale być w stanie uruchomić rspec --driver = selen (lub coś podobnego)Rspec + Capybara opcjonalnie zmień sterownik JS

Jakieś pomysły?

Odpowiedz

0

Nigdy nie skończyło się znaleźć odpowiedź na to, więc oto hacky rozwiązanie wymyśliłem:

Jedyną rzeczą znalazłem, że mogę zmienić niezawodnie był system znakowania. Tak więc wzywam używając -t wizualnego tagu, a następnie zabieram go.

W specyfikacji/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~ 

Teraz można uruchomić swoje testy z rspec (tests to run) -t visual
Głównym problemem jest to, że będzie to uniemożliwić prowadzenie szczegółowych badań. Nadal można zrobić pojedynczy plik z numerem rspec spec/features/signup_spec.rb -t visual, ale nie można dodać pliku :54, aby działał pod określonym numerem linii.

+0

Nie, w rzeczywistości możesz dodać numer linii ': 54', aby uruchomić konkretny test, przynajmniej w 2015 i 2016, ale nie pamiętam, czy było to możliwe również w 2014 roku. – Aleks

0

Można ustawić zmienną środowiskową z wiersza poleceń, które mogą być użyte w specyfikacji/spec_helper.rb:

DEBUG = ENV['DEBUG'] || false 
if DEBUG 
    Capybara.default_driver = :selenium 
else 
    Capybara.default_driver = :rack_test 
    Capybara.javascript_driver = :poltergeist 
end 

które następnie mogą być uruchamiane z linii poleceń tak:

DEBUG=true rspec spec/features/my_spec.rb:35

Pozwoli to określić konkretny numer linii.

Możesz również zmienić swoją strategię oczyszczania w zależności od kierowcy Kapibara używany (tzn środkiem do czyszczenia bazy danych):

RSpec.configure do |config| 
    config.before(:suite) do 
    if DEBUG 
     DatabaseCleaner.strategy = :truncation 
    else 
     DatabaseCleaner.strategy = :transaction 
    end 

    DatabaseCleaner.clean_with(:truncation) 
    end 
end 

Jeśli chcesz uzyskać fantazyjny, można połączyć go z tym stackoverflow odpowiedź : https://stackoverflow.com/a/5150855/95683 spowolnić prędkość, z jaką działa selen widowisko, gdy pracujesz w trybie debug:

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

mam co myślę, że może być mniej hacky rozwiązanie. Zasadniczo odrywam rozwiązanie Jeffa Perrina, ale czyni to mniej skomplikowanym.

Mój DatabaseCleaner jest ustawiony tak, aby zawsze używać obcięcia, więc nie trzeba warunkowo konfigurować tej części.

Ustaw javascript_driver ten sposób:

# spec/spec_helper.rb 

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

nie widzę żadnej potrzeby, aby ustawić domyślny sterownik kapibary, jeśli mamy zawsze jednoznacznie ustalone javascript_driver do czegoś. (Możliwe, że Jeff coś o tym wie.)

Będzie używać Webkita jako sterownika, chyba że w Twoim środowisku jest ustawiona USE_SELENIUM_FOR_CAPYBARA.

Powinieneś oczywiście mieć również klejnoty sterownika Selenium i Webkit w swoim Gemfile, jeśli chcesz, aby RSpec mógł działać z każdym ze sterowników.

0

To rozwiązanie doskonale się sprawdziło. Ustawiam zmienną środowiskową i sprawdzam jej wartość. Dodaj do tego pliku 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 

a następnie uruchomić na konsoli polecenie

DRIVER = poltergeist rspec // do prowadzenia testu na poltergeist

RSpec // do jazdy na selenu

Powiązane problemy