2012-01-09 15 views
16

Ho aggiunto alcune finestre di dialogo di conferma per la mia applicazione Rails 3.1 e, prima ancora, i test corrispondenti. Seguendo il modello di Railscast #257, ho aggiunto ": js => true" al test, aggiunto database_cleaner e modificato il file spec_helper.rb di conseguenza.Errore di accesso durante il test con Capybara, Rspec e selenio in Rails 3.1

Quando eseguo il test, Firefox viene avviato, Capybara-Selenium compila nei campi il nome utente e la password appropriati, ma il log-in non riesce (ad esempio, "nome utente/password non validi".) Altri test che non hanno ': js => true' e inoltre accedi, continua a passare.

vorrei aggiungere più javascript per la mia applicazione in futuro e sto evitando soluzioni che hackerare Capybara per ottenere questo al lavoro (ad esempio, fare clic su 'OK' su tutte le finestre di dialogo.)

Tutte le idee che Potrei essere disperso? Non riescono, qualche suggerimento su come eseguire il debug di questo problema?

Grazie.

risposta

14

È necessario impostare use_transactional_fixtures = false per i test sul selenio. Questo può essere fatto nel spec_helper.rb con

config.use_transactional_fixtures = false 

per tutti i test.

o fare questo per un singolo TestCase:

describe 'testcase' , :type => :request do 
    self.use_transactional_fixtures = false 
    it 'your test', :js => :true do 
    testing... 
    end 
end 

Questo accade perché il selenio-test accedere al database in un modo diverso. Con le transazioni transazionali abilitate, il selenio funzionerà su un database vuoto -> il tuo utente non esiste e non puoi effettuare il login.

Per i test normali è necessario utilizzare dispositivi transazionali perché i test vengono eseguiti molto più rapidamente.

+0

Grazie per la risposta. Ho avuto fixture transazionali disabilitate nel mio spec_helper.rb e non ha funzionato. Ma farlo con il test specifico ha funzionato! Mi ha registrato e non ha superato il test quando ha fatto clic sul pulsante. Ma è apparso il dialogo di conferma, ora ho solo bisogno di capire come fare clic attraverso il test di integrazione. Grazie ancora! – JHo

+0

se è una finestra di dialogo delle rotaie comuni puoi provare: page.driver.browser.switch_to.alert.accept –

+0

Cosa succede se sto usando mongoid? non posso impostare use_transactional_fixtures = false –

9

Secondo Avdi Grimm's post (presenta una spiegazione dettagliata):

Gemfile:

group :test do 
    gem 'database_cleaner' 
end 

spec_helper.rb:

config.use_transactional_fixtures = false 

spec/supporto/database_cleaner.rb :

RSpec.configure do |config| 

    config.before(:suite) do 
    DatabaseCleaner.clean_with(:truncation) 
    end 

    config.before(:each) do 
    DatabaseCleaner.strategy = :transaction 
    end 

    config.before(:each, :js => true) do 
    DatabaseCleaner.strategy = :truncation 
    end 

    config.before(:each) do 
    DatabaseCleaner.start 
    end 

    config.after(:each) do 
    DatabaseCleaner.clean 
    end 

end 

avevo infissi transazionali disabilitata ma aggiungendo il blocco :js => true per database_cleaner.rb ha fatto per me.

Problemi correlati