Sto lavorando su alcune storie di Cucumber per un'applicazione di registrazione che prevede una serie di passaggi.Variabili di sessione con Storie di cetriolo
Piuttosto che scrivere una storia Huuuuuuu per coprire tutti i passaggi contemporaneamente, che sarebbe difettoso, preferirei lavorare attraverso ogni azione nel controller come un utente normale. Il mio problema qui è che sto memorizzando l'ID account che viene creato nel primo passaggio come variabile di sessione, quindi quando vengono visitati il passaggio 2, il passaggio 3 ecc. Vengono caricati i dati di registrazione esistenti.
Sono consapevole di poter accedere a controller.session[..]
all'interno di specifiche RSpec, tuttavia quando provo a farlo nelle storie di Cucumber fallisce con il seguente errore (e, ho anche letto da qualche parte questo è un anti-pattern ecc. ..):
Utilizzando controller.session [: qualunque cosa] o una sessione [: qualunque cosa]
You have a nil object when you didn't expect it!
The error occurred while evaluating nil.session (NoMethodError)
Utilizzando sessione (: qualunque cosa)
wrong number of arguments (1 for 0) (ArgumentError)
Quindi, sembra che l'accesso al negozio di sessioni non sia realmente possibile. Quello che mi chiedo è se potrebbe essere possibile (e credo che sarebbe meglio ..):
- Mock il negozio sessione ecc
- dispone di un metodo all'interno del controller e stub che fuori (ad esempio
get_registration
che assegna una variabile di istanza ...)
ho guardato attraverso il libro RSpec (beh, scremato) e aveva uno sguardo attraverso Webrat ecc, ma non ho davvero trovato una risposta al mio problema ...
Per chiarire un po 'di più, il processo di registrazione è più come una macchina a stati - ad es. l'utente avanza attraverso quattro passaggi prima che la registrazione sia completata - quindi 'logging' non è realmente un'opzione (rompe il modello di come funziona il sito) ...
Nella mia specifica per il controller sono riuscito per eliminare la chiamata al metodo che carica il modello in base alla variabile var, ma non sono sicuro che la riga "antipattern" si applichi anche agli stub e ai mock?
Grazie!
Grazie per l'ingresso ... Ho aggiornato la mia domanda con qualche dettaglio in più, ma quello che hai suggerito non aiuta in quanto comporterebbe l'aggiunta di funzionalità specificamente per i test, che a me sembrano più di un 'anti-pattern' - ma, eliminando i controller, i metodi infrangono questa regola? –
funzionalità aggiuntiva? Come fa un utente ad accedere al tuo sito? Si cita il processo di registrazione ma non si effettua il login. Perché non puoi creare una fabbrica per un utente già registrato e registrarti come ti ho mostrato sopra? Le storie di cetrioli devono esprimere esattamente come l'utente interagisce con il tuo sito. Un utente non può eliminare i metodi del controller. Hanno moduli da compilare e link per fare clic. Non è un test di accettazione se non imita il comportamento dell'utente. – danpickett
Vedo entrambi i lati qui.Ho quasi esattamente il precedente per la funzionalità che verifica l'autenticazione funziona nel modo che voglio. Per altre caratteristiche, sembra un dolore dover ripetere quei passaggi di capibara per accedere ad ogni scenario. Cucumber può manipolare lo stato del database ai fini di un test, perché non la sessione? –