Cosa dovrebbe essere testato in Javascript?

12

Al lavoro, abbiamo appena avviato un'applicazione pesantemente basata su Javascript (in realtà utilizzando Coffeescript, ma ancora), di cui ho implementato un sistema di test automatizzato usando JsTestDriver e fabric.

Non abbiamo mai scritto qualcosa con così tanto Javascript, quindi finora non abbiamo mai fatto test su Javascript. Non sono sicuro di cosa dovremmo testare esattamente nei nostri test unitari. Abbiamo scritto plugin JQuery per varie cose, quindi è abbastanza ovvio che dovrebbero essere verificati per quanto possibile la correttezza con JsTestDriver, ma tutti gli altri membri del mio team sembrano pensare che dovremmo provare anche il Javascript a livello di pagina.

Non penso che dovremmo testare Javascript a livello di pagina come test unitari, ma invece utilizzare un sistema come Selenium per verificare che tutto funzioni come previsto. Il mio ragionamento principale per questo è che al momento, i test Javascript a livello di pagina sono garantiti per fallire tramite JsTestDriver, perché stanno cercando di accedere a elementi sul DOM che non possono esistere.

Quindi, quale unità dovrebbe essere testata in Javascript?

    
posta Nathan Hoad 15.11.2011 - 10:11
fonte

3 risposte

4

Verifica tutto ciò che puoi.

La logica pura può essere testata facilmente.

Se il tuo codice interagisce con il DOM o la rete, è molto più difficile.

Se riesci ad astrarre un pezzo di codice per lavorare su un elemento DOM arbitrario invece che su uno specifico, puoi testarlo più facilmente. (Fai in modo che l'elemento funzioni su un parametro).

Il codice che utilizza Ajax può essere testato semplicemente chiamando la funzione di callback con dati fissi. Ho avuto alcuni test in cui ho sovrascritto $.ajax con la mia funzione. Assicurati di rimettere quello vero quando hai finito!

Quello che scoprirai è che "livello di pagina javascript" significa veramente "codice strettamente accoppiato" e se decidi le parti del codice, puoi testarle in modo indipendente.

(Il selenio non è uno strumento di test unitario, è ottimo per scenari di alto livello, ma non puoi testarlo con esso, e non funziona in un ambiente isolato.)

    
risposta data 15.11.2011 - 14:59
fonte
5

Algoritmi di test. Le parti strettamente correlate alla GUI dipendono maggiormente da browser specifici, quindi devono essere testate utilizzando utilità di tipo selenio.

Il tuo codice, ovviamente, deve contenere algoritmi come pezzi di codice isolati, se così non fosse, il test unitario è quasi impossibile.

i plugin jquery, btw, non sono facilmente testabili da unità.

    
risposta data 15.11.2011 - 10:22
fonte
-1

Ero abituato a lavorare con Java e da ciò che vedo testing di unità Java è più semplice di test di unità JavaScript perché Java è più rigido.

Sono venduto su questo sviluppo basato sui test è la cosa migliore quindi sto anche esplorando come testare il codice JavaScript. In Java ho preso in giro il codice che ha reso la connessione al database, gli oggetti di accesso ai dati, e l'ho confrontato con il codice in JavaScript che cambia il DOM e il codice che rende le chiamate AJAX al server.

Quello che sto ottenendo è che mi sembra che ciò che dovrebbe essere testato sia la logica esplicitamente. Ad esempio, non si desidera effettuare una chiamata AJAX quando si eseguono i test unitari perché (a) è necessario che il server sia in esecuzione e (b) sia lento e una delle linee guida del test delle unità è che deve essere super veloce in modo che gli sviluppatori non evitino di eseguirli come ogni minuto.

Un'altra linea guida è che il processo di integrazione continua invii un messaggio di posta elettronica dicendo che ha trovato un test unitario non riuscito.

    
risposta data 16.01.2013 - 11:51
fonte

Leggi altre domande sui tag