2013-08-29 21 views
5

Uso poltergeist/phantomjs per CI, ma voglio essere in grado di modificare facoltativamente il driver JS in selenio per guardare il mio test eseguito localmente. Idealmente mi piacerebbe avere un flag da riga di comando per questo poltergeist di default, ma essere in grado di eseguire rspec --driver = selenium (o qualcosa di simile)Rspec + Capybara facoltativamente cambia driver JS

Qualche idea?

risposta

0

Mai finito per trovare una risposta per questo, ecco la soluzione hacky mi si avvicinò con:

L'unica cosa che ho trovato che avrei potuto cambiare in modo affidabile è stato il sistema di etichettatura. Così chiamo usando -t tag visivo e poi lo porto via.

In 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~ 

Ora è possibile eseguire i test con rspec (tests to run) -t visual
Il problema principale di questo è che vi impedirà l'esecuzione di test specifici. È comunque possibile eseguire un singolo file con rspec spec/features/signup_spec.rb -t visual ma non è possibile aggiungere un numero :54 da eseguire a un numero di riga specifico.

+0

No, in realtà è possibile aggiungere un numero di riga ': 54' per eseguire test specifici, almeno nel 2015 e nel 2016, ma non ricordo se fosse possibile anche nel 2014. – Aleks

0

È possibile impostare una variabile di ambiente dalla riga di comando che può essere utilizzato in 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 

che possono poi essere eseguito dalla riga di comando in questo modo:

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

Ciò consentirà di specificare un numero di riga specifico.

Si può anche dover modificare la propria strategia di pulizia a seconda del driver capibara in uso (ad esempio, con il pulitore del database):

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

    DatabaseCleaner.clean_with(:truncation) 
    end 
end 

Se si desidera ottenere fantasia, è possibile combinare con questa risposta StackOverflow : https://stackoverflow.com/a/5150855/95683 per rallentare la velocità con cui il selenio viene eseguito specifiche quando sono in esecuzione in modalità debug:

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

ho quello che penso potrebbe essere una soluzione meno hacky. Fondamentalmente sto strappando via la soluzione di Jeff Perrin ma rendendola meno complicata.

Il mio DatabaseCleaner è impostato per utilizzare sempre il troncamento, quindi non è necessario configurare condizionatamente quella parte.

impostare il proprio javascript_driver in questo modo:

# spec/spec_helper.rb 

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

non vedo alcuna necessità di impostare il driver di default di Capybara se stiamo sempre impostando esplicitamente javascript_driver a qualcosa. (È possibile che Jeff ne sappia qualcosa che io non conosca.)

Questo utilizzerà Webkit come driver, a meno che non sia stato impostato USE_SELENIUM_FOR_CAPYBARA nel proprio ambiente.

Dovresti anche avere le gemme del driver Selenium e Webkit nel tuo Gemfile se vuoi che RSpec sia in grado di funzionare con entrambi i driver.

0

Questa soluzione ha funzionato perfettamente per me. Ho impostato una variabile di ambiente e ne controlla il valore. Aggiungi questo al vostro file di 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 

E poi sulla console eseguire questo comando

DRIVER = rspec poltergeist // per l'esecuzione di test su poltergeist

rspec // per l'esecuzione su selenio