2010-08-12 2 views
7

Mi piacerebbe avere una funzionalità di Cetriolo che testa la funzionalità memorabile di Idea (un cookie di ricordami).Come posso utilizzare Cucumber per testare la funzionalità Ricordabile di Devise?

È facile controllare la casella di controllo Ricordami usando capibara ma come dovrei simulare un utente che ritorna al sito dopo aver chiuso la finestra?

+0

Perché si vuole a quando escogitare stesso farà questo a parte di là test? –

+1

Perché penso che sia importante assicurarsi che sto testando questa funzionalità a livello di integrazione - cioè, sto usando correttamente ?, funziona correttamente ?, e i miei clienti possono vedere che sta funzionando correttamente in base al cetriolo test di accettazione ?. – srboisvert

risposta

1

Mi sono inventato il seguente trucco per il test del rack, e un po 'di pulizia del selenio leggermente più pulita, per testare la funzionalità di remember-me di Devise in cetriolo/capibara. Indica semplicemente al driver di cancellare manualmente il cookie di sessione. Non tutti i driver sono supportati, ho implementato solo i due che ho usato:

http://gist.github.com/484787

Ciò presuppone la memorizzazione dei cookie della sessione. Rimuovi il tag @announce dallo scenario per sbarazzarti della verbosità.

Un'altra opzione, suggerita da Matt Wynne in the mailing list discussion, potrebbe essere alla ricerca in altri negozi dei cookie, e di cancellarli dalla query o eliminazione file:

tolto dalle rotaie agile libro:

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_" 

o

rake db:sessions:create 
config.action_controller.session_store = :active_record_store 

Rails ha anche un metodo di reimpostazione della sessione, ma credo che non abbiamo accesso a questo perché non possiamo collegarci alla sessione di binari durante il test con capibara.

Spero che questo aiuti,

Nick succo

0

Ho utilizzato email-spec per eseguire questa operazione. Il mio scenario è simile al seguente:

@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." 

Annotare il @ allow-salvataggio decorazione sopra lo scenario che è necessario quando si usa Devise.

Spero che questo aiuti.

+0

È roba utile, in particolare le specifiche per le e-mail, tuttavia volevo sapere come testare le funzionalità memorabili di Devise, ovvero la capacità di memorizzazione dei cookie in modo che gli utenti non debbano accedere costantemente ogni volta che visitano il sito. – srboisvert

0

Credo che si potrebbe uscire con il capibara, e quindi accedere di nuovo in qualcosa di simile

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. 

stato biscotto corrente Questa dovrebbe utilizzo cabybara per modellare questo flusso.

1

di nruth è stato davvero utile, ma mi sentivo come cancellare il cookie per nome è stato barare. Ho creato un passaggio che elimina i cookie che un browser eliminerebbe quando è stato chiuso e riavviato (qualsiasi cookie senza una data di scadenza impostata e impostata in futuro).

Si può vedere in this commit (anche se l'ho fatto solo per il driver RackTest perché non ho l'installazione Selenium). Puoi anche vedere la mia funzione login/remember_me in this commit. E ho refactored le classi per separare i file in this commit.

Spero sia utile.

0

È possibile utilizzare show_me_the_cookies per questo, come illustrato di seguito:

And(/^I leave the site$/) do 
    expire_cookies 
end