Vorrei conoscere le espressioni idiomatiche o le best practice per testare un flusso di lavoro multi-passo utilizzando rspec.testare un flusso di lavoro in più fasi in rspec
Prendiamo come esempio un sistema di "carrello della spesa", dove il processo di acquisto potrebbe essere
- quando l'utente si sottomette al carrello e noi non utilizza HTTPS, reindirizzare a https
- quando l'utente fa valere a cestino e stiamo usando https e non ci sono cookie, creare e visualizzare un nuovo cestino e rispedire un cookie
- quando l'utente invia al carrello e stiamo usando https e c'è un cookie valido e il nuovo elemento è per un altro prodotto rispetto al primo elemento, aggiungere una riga al carrello e visualizzare entrambe le righe
- quando l'utente invia al carrello e utilizziamo https e c'è un cookie valido e il nuovo articolo è per lo stesso prodotto di uno precedente, incrementa la quantità della riga del carrello e visualizza entrambe le righe
- quando l'utente fa clic su "checkout" sulla pagina del carrello e sta usando https e non v'è un biscotto e il canestro non è vuoto e ...
- ...
ho letto http://eggsonbread.com/2010/03/28/my-rspec-best-practices-and-tips/ che tra l'altro ricorda che ogni "it di" dovrebbe contenere una sola asserzione: invece di fare il calcolo e poi testare diversi attributi nello stesso blocco, usare un "prima" all'interno di un contesto per creare (o recuperare) l'oggetto sotto test e assegnarlo a @some_instance_variable, quindi scrivi ogni attributo test come blocco separato. Questo aiuta un po ', ma in un caso come descritto sopra dove il test n richiede di eseguire tutte le impostazioni per i passaggi [1..n-1] mi trovo a duplicare il codice di installazione (ovviamente non buono) o creare molte funzioni di supporto con nomi sempre più ingombranti (def create_basket_with_three_lines_and_two_products) e chiamandoli consecutivamente in ogni blocco precedente al blocco.
Eventuali suggerimenti su come eseguire questo in modo meno dettagliato/noioso? Apprezzo il principio generale alla base dell'idea che ogni esempio non dovrebbe dipendere dallo stato lasciato indietro dagli esempi precedenti, ma quando si verifica un processo in più fasi e le cose possono andare storte in qualsiasi momento, la configurazione del contesto per ogni passaggio è inevitabilmente andando a richiedere il riesecuzione di tutte le impostazioni per i precedenti n passaggi, quindi ...
ora che hai usato rspec-steps gem sei soddisfatto del risultato per risolvere il problema di rispetto multi-step? – Angela
@Angela: Hmm, bella domanda. L'ho usato brevemente, ma il resto del gruppo non ne era entusiasta, così abbiamo finito per abbandonarlo e avere più duplicazioni. I * think * la logica era che avevamo bisogno di più leggibilità, ma è stato un tempo lungo .... A questo punto, trovo che i veri test di integrazione sono più facili da scrivere come grandi funzioni che fanno un singolo "flusso di lavoro" per test. Non l'approccio più idiomatico o popolare, ma mi piace la leggibilità. – Nerdmaster
Vedo così solo un singolo 'describe' nella rspec? – Angela