Questo probabilmente non è il primo tutorial sui test che tu abbia mai visto. Ma forse hai avuto i tuoi dubbi sui test e non hai mai avuto il tempo di leggerli. Dopotutto, può sembrare un lavoro extra senza motivo.
Questo tutorial intende cambiare le tue opinioni. Cominceremo dall'inizio: cosa sta testando e perché dovresti farlo? Quindi, parleremo brevemente della scrittura di un codice testabile, prima che in realtà, come sapete, si faccia qualche test! Andiamo ad esso!
Abbastanza semplice, analisi è l'idea di avere una serie di requisiti che un dato pezzo di codice deve essere sufficientemente robusto per essere usato nel mondo reale. Spesso, scriveremo qualche JavaScript e poi lo apriremo nel browser e faremo un po 'di clic per assicurarci che tutto funzioni come ci aspetteremmo. Anche se a volte è necessario, non è il tipo di test di cui stiamo parlando qui. In effetti, spero che questo tutorial ti convinca che il self test rapido e sporco dovrebbe integrare una procedura di test più rigida: l'autodiagnosi va bene, ma un elenco completo di requisiti è fondamentale.
Come puoi immaginare, il problema con il test di aggiornamento e clic su JavaScript è duplice:
Scrivendo test che controlli tutto ciò che il tuo codice dovrebbe fare, puoi verificare che il tuo codice sia nel migliore stato di forma prima di usarlo su un sito web. Nel momento in cui qualcosa è effettivamente in esecuzione in un browser, ci sono probabilmente più punti di errore. I test di scrittura consentono di concentrarsi su ogni singola parte testabile; se ogni pezzo fa bene il suo lavoro, le cose dovrebbero funzionare insieme senza problemi (testare singole parti come questa viene chiamata unit test).
Se sei un programmatore poliglotta), avresti potuto fare test in altre lingue. Ma ho trovato test in JavaScript una bestia diversa da uccidere. Dopo tutto, non stai costruendo troppe interfacce utente, ad esempio, in PHP o Ruby. Spesso, stiamo facendo DOM in JavaScript, e in che modo lo testate esattamente?
Bene, il lavoro DOM non è quello per cui vuoi scrivere i test; è la logica. Ovviamente, quindi, la chiave qui è separare la tua logica e il tuo codice UI. Questo non è sempre facile; Ho scritto la mia giusta dose di interfaccia utente basata su jQuery, e può diventare piuttosto complicato abbastanza rapidamente. Ciò non solo rende difficile il test, ma anche la logica intrecciata e il codice UI possono essere difficili da modificare quando cambia il comportamento desiderato. Ho trovato che usare metodologie come template (anche template) e pub / sub (anche, pub / sub) rendono la scrittura migliore, un codice più testabile più facile.
Ancora una cosa, prima di iniziare a programmare: come scriviamo i nostri test? Esistono numerose librerie di test che puoi usare (e molti buoni tutorial per insegnarti ad usarle, vedi i link come la fine). Tuttavia, costruiremo una piccola libreria di test da zero. Non sarà così elegante come alcune librerie, ma vedrai esattamente cosa sta succedendo.
Con questo in mente, mettiamoci al lavoro!
Stiamo costruendo una micro galleria fotografica: una semplice lista di miniature, con un'immagine che mostra a grandezza naturale sopra di loro. Ma prima, costruiamo la funzione di test.
Man mano che si impara di più sulle test e sulle librerie di test, troverete numerosi metodi di test per testare ogni sorta di specifica. Tuttavia, tutto può essere ridotto al fatto che due cose siano uguali o meno: per esempio,
Quindi, ecco il nostro metodo per testare l'uguaglianza:
var TEST = areEqual: function (a, b, msg) var result = (a === b); console.log ((result? "PASS:": "FAIL:") + msg); ritorno risultato; ;
È piuttosto semplice: il metodo richiede tre parametri. I primi due vengono confrontati e, se sono uguali, i test passano. Il terzo parametro è un messaggio che descrive il test. In questa semplice libreria di test, stiamo semplicemente inviando i nostri test alla console, ma puoi creare output HTML con uno stile CSS appropriato se desideri.
Ecco il areNotEqual
metodo (all'interno della stessa TEST
oggetto):
areNotEqual: function (a, b, msg) var result = (a! == b); console.log ((result? "PASS:": "FAIL:") + msg); ritorno risultato;
Noterai le ultime due righe di sono uguali
e areNotEqual
lo stesso. Quindi, possiamo tirarli fuori in questo modo:
var TEST = areEqual: function (a, b, msg) return this._output (a === b, msg), areNotEqual: function (a, b, msg) return this._output (a! == b, msg); , _output: function (result, msg) console [risultato? "log": "warn"] ((result? "PASS:": "FAIL:") + msg); ritorno risultato; ;
Grande! La cosa bella qui è che possiamo aggiungere altri metodi "zucchero" usando i metodi che abbiamo già scritto:
TEST.isTypeOf = function (obj, type, msg) return this.areEqual (typeof obj, type, msg); ; TEST.isAnInstanceOf = function (obj, type, msg) return this._output (obj instanceof type, msg); TEST.isGreaterThan = function (val, min, msg) return this._output (val> min, msg);
Puoi sperimentare da solo; dopo aver seguito questo tutorial, avrai una buona idea di come usarlo.
Quindi, creiamo una galleria fotografica super-semplice, usando il nostro mini TEST
quadro per creare alcuni test. Qui citerò che, sebbene lo sviluppo basato sui test sia una buona pratica, non lo useremo in questo tutorial, principalmente perché non è qualcosa che puoi imparare in un singolo tutorial; ci vuole molta pratica per davvero Grok. Quando inizi, è più semplice scrivere un po 'di codice e testarlo.
Quindi iniziamo. Certo, avremo bisogno di un codice HTML per la nostra galleria. Manterremo questo piuttosto semplice:
Test in JavaScript
Ci sono due cose principali che vale la pena notare qui: innanzitutto, abbiamo un che contiene il markup molto semplice per la nostra galleria di immagini. No, probabilmente non è molto robusto, ma ci dà qualcosa su cui lavorare. Quindi, nota che stiamo collegando tre
>