2012-06-11 16 views
7

Ich habe eine Anwendung mit Schienen 3.2 und Devise. Ich habe eine Anfrage Testsuite mit rspec und Capybara.Rails 3 mit Devise und rspec: Warden Testhelfer unzuverlässig

Ich habe versucht, auf die Verwendung der Warden-Test-Helfer in meinem Anmelde-Helfer umzuschalten, anstatt dass Capybara das Anmeldeformular ausfüllen und einreichen muss. Aufgrund der Größe und Komplexität meiner Testsuite ergeben sich Einsparungen von mehr als eineinhalb Minuten in meinen Testlaufzeiten.

In meiner Konfiguration ist:

RSpec.configure do |config| 
    config.include Warden::Test::Helpers, :type => :request 
    config.after :each do 
    Warden.test_reset! 
    end 
end 

Und in einem Kontext:

let!(:current_user) { FactoryGirl.create(:user) } 

background do 
    login_as(current_user, :scope => :user) 
end 

, jedoch bei der Ausführung der Testsuite dieser Konfigurationen fast jedem Testlauf in eine andere zufällig andernfalls Anfrage spec hat mit durch zu der Seite, die sich präsentiert, als ob der Benutzer nicht eingeloggt wäre. (Speziell, die durch eine user_signed_in? bedingte Verbindung gesteuert werden)

Meine Frage n: Ist jemand anderer auf solche Unzuverlässigkeit gestoßen und wie kann er gemildert werden?

Antwort

1

Die absolut einfachste Sache zu tun ist, verwenden Sie einfach das Formular sign_in in Ihrem before :each Block. Sie benötigen die Testhelfer in den Controller-Spezifikationen, da sie vom Gerät isoliert sind. Sie haben dieses Problem nicht in einem Integrationstest.

+1

Ich stimme zu, dass ist das einfachste und das ist die Lösung, die ich für jetzt verwende. Aber ich möchte wirklich, dass diese eineinhalb Minuten meine Tests unterbrechen. –

+0

haben Sie versucht, einfach die E-Mail/das Passwort an 'user_session_path' zu senden? – DVG

+0

Ja, das funktioniert gut mit Selen, aber aufgrund einiger Probleme mit Selen und Firefox verwenden wir capybara-webkit, das das direkte Posten von Daten in einer URL nicht unterstützt. –

0

Obwohl eine alte Post habe ich auch dieses Problem mit Rails 4.1 und Warden 1.2.3. Mir ist aufgefallen, dass es eine neuere Version von Warden mit Arbeiten an den Testhelfern gibt. Jeder Erfolg mit der neueren Version?

Btw das Verhalten, das ich beobachte ist, dass Warden nicht immer erfolgreich über den help login_as anmelden. Dies führt dazu, dass sich meine App auf der Anmeldeseite befindet und nicht an dem Ort, an dem sie sich befinden sollte.

+0

Ich benutze Rails 4.1.16 mit Warden 1.2.6 und kein Glück hier. –

Verwandte Themen