2010-08-12 5 views
7

Ich hätte gerne eine Cucumber-Funktion, die die Erinnerungsfunktion von Devise testet (ein Remember Me Cookie).Wie kann ich Cucumber verwenden, um die Rememberable-Funktionalität von Devise zu testen?

Es ist einfach, das Kästchen zur Erinnerung an Capybara zu aktivieren, aber wie sollte ich einen Benutzer simulieren, der nach Schließen des Fensters auf die Seite zurückkehrt?

+0

Warum würden Sie wollen, wenn devise selbst wird dies tun, abgesehen von dort Tests? –

+1

Weil ich denke, dass es wichtig ist, dass ich dieses Feature auf der Integrationsebene teste - das heißt - verwende ich es richtig ?, funktioniert es korrekt ?, und können meine Kunden sehen, dass es in Gurken basiert richtig funktioniert Akzeptanztests?. – srboisvert

Antwort

1

Ich kam mit dem folgenden Rack-Test-Hack, und etwas sauberer Selen-API-Gebrauch, um Devise remember-me Funktionalität in Gurke/Capybara zu testen. Es weist den Treiber lediglich an, den Sitzungscookie manuell zu löschen. Nicht alle Treiber unterstützt werden, ich implementiert nur die zwei, die ich verwendet habe:

http://gist.github.com/484787

Dieses Cookie Speicherung der Sitzung übernimmt. Entferne das @ announce-Tag aus dem Szenario, um die Ausführlichkeit loszuwerden.

Eine weitere Option, vorgeschlagen von Matt Wynne in the mailing list discussion, kann an anderen Cookie speichern suchen und sie durch Abfrage oder Löschen von Dateien zu löschen:

von agilen Schienen Buch gehoben:

config.action_controller.session_store = CGI::Session::PStore (or just :p_store) 
config.action_controller.session_options[:tmpdir] = "/Users/dave/tmp" 
config.action_controller.session_options[:prefix] = "myapp_session_" 

oder

Rails hat auch eine Reset-Session-Methode, aber ich glaube, wir haben keinen Zugriff darauf, weil wir nicht in die Rails-Sitzung beim Testen einhaken können mit Capybara.

hoffe, das hilft,

Nick

0

Ich habe email-spec verwendet, um dies zu erreichen. Mein Szenario sieht wie folgen aus:

@allow-rescue 
Scenario: Create New Account (Everything cool) 
Given I am not authenticated 
When I go to register 
And I fill in "Name" with "bill" 
And I fill in "Email" with "[email protected]" 
And I fill in "Password" with "please" 
And I fill in "Password Confirmation" with "please" 
And I press "Sign up" 
Then "[email protected]" should receive an email 
And I open the email 
And I should see "Confirm my account" in the email body 
When I follow "Confirm my account" in the email 
Then I should see "Your account was successfully confirmed. You are now signed in." 

Notiere die @ allow-Rettung Dekoration über das Szenario, das notwendig ist, wenn Devise verwenden.

Hoffe, das hilft.

+0

Das sind handliche Sachen, vor allem E-Mail-Spezifikationen, aber ich wollte wissen, wie man die erinnerbare Funktionalität von Devise testet - das ist die Fähigkeit zum Speichern von Cookies, damit sich die Benutzer nicht jedes Mal, wenn sie die Site besuchen, einloggen müssen. – srboisvert

0

Ich denke, man mit Capybara ausloggen konnte, und dann wie

in etwas wieder anmelden
Given I am on the login screen 
And I select 'Remember Me' 
And I click 'login' 
Then I should be 'logged in' 
When I click 'log out' 
Then I should be 'logged out' #=> potentially destroy a session here? 
When I click log in 
Then I should be logged in 
And I should not be directed to the login form. 

dieses sollte Verwendung cabybara aktuellen Cookie Zustand diese Strömung zu modellieren.

1

nruth der Kern war wirklich hilfreich, aber ich hatte das Gefühl, das Cookie zu löschen, indem Name betrog. Ich habe einen Schritt erstellt, der die Cookies löscht, die ein Browser löschte, wenn er geschlossen und neu gestartet wurde (ein Cookie ohne ein Ablaufdatum, das in der Zukunft festgelegt und festgelegt wurde).

Sie können es in this commit sehen (obwohl ich es nur für den RackTest-Treiber gemacht habe, da ich kein Selenium-Setup habe). Sie können auch meine Login/remember_me Funktion in this commit sehen. Und ich refaktorierte die Klassen, um Dateien in this commit zu trennen.

Ich hoffe, das ist hilfreich.

Verwandte Themen