Devo estendere / correggere un grande modulo online scritto da altri sviluppatori. C'è molto codice, mescolando PHP e JS. È una specie di stile di scrittura di sola scrittura e voglio rifare completamente, ma al momento non posso.
Funziona così:
- È un modulo in stile wizard con 12 passaggi: chiamiamoli fasi per non confondere con passaggi dei test.
- L'utente deve riempire almeno ~ 100 campi per finire.
- Alcuni campi sono raggruppati per 3-5. Questi gruppi possono essere aggiunti e rimossi dinamicamente con JS.
- La convalida viene eseguita dopo l'invio di ciascuna fase. Se si sono verificati degli errori, l'utente viene avvertito immediatamente e non può andare oltre finché non risolve tutti gli errori.
- I dati inviati vengono temporaneamente memorizzati nella sessione tra le fasi. Nessuna archiviazione permanente.
- L'utente non può saltare le fasi, solo in modo sequenziale andare avanti e indietro alle fasi già completate.
È ridicolo testare manualmente questa cosa, quindi ho scritto un test utilizzando Behat con Mink e Selenium2.
Ho solo 1 test ora, che completa tutte le 12 fasi del modulo. Per andare a un punto specifico nel processo di compilazione del modulo, ho creato una definizione di passaggio che fa in modo che il webdriver attenda 1 ora (ride di me). Quando ho bisogno di testare una fase specifica, aggiungo questo passaggio dove voglio che il selenio si fermi, lasciando aperta la finestra del browser in modo da poter fare tutto ciò che voglio manualmente senza dover riempire tutti i campi precedenti.
Risparmia un sacco di tempo, ma si sente stupido. Ho delle ragioni per farlo:
- deve essere fatto al più presto.
- Non riesco a testare ogni passaggio separato nel modulo.
- Non riesco a riutilizzare parti del processo di riempimento senza dover scrivere un bel po 'di codice PHP. Ora il mio test è di appena ~ 120 righe scritte in lingua Gherkin.
La versione semplificata della mia domanda è: come devo testarlo?
Posso pensare a diversi modi:
- Modifica il codice per consentire le fasi di salto. Questo può essere fatto in modo sicuro rilevando i parametri dell'ambiente con l'applicazione e decidendo se il client (webdriver o utente) può o non può saltare le fasi, quindi saltare non è consentito in un ambiente di produzione.
- Basta scrivere più test con un sacco di copia-incolla e diventare una scimmia più grande.
-
Scrivi le definizioni dei passaggi per completare separatamente le fasi specifiche. Quindi, potrei semplicemente scrivere
When I complete phase 1 And complete phase 2 And complete phase 3 ...
nei test.
Quindi, la versione completa della mia domanda è: quale modo è preferibile e quali (dis) vantaggi ogni modo ha? Forse ci sono altri modi, come progettare un'applicazione in un modo completamente diverso così non ci sono problemi di questo tipo.