Goniometro - Concetti di test Javascript
Poiché la conoscenza di JavaScript è essenziale per lavorare con Goniometro, in questo capitolo comprendiamo in dettaglio i concetti del test JavaScript.
Test e automazione JavaScript
JavaScript è il linguaggio di scripting interpretato e digitato dinamicamente più popolare, ma l'attività più impegnativa è testare il codice. È perché, a differenza di altri linguaggi compilati come JAVA e C ++, non ci sono passaggi di compilazione in JavaScript che possono aiutare il tester a capire gli errori. Inoltre, i test basati su browser richiedono molto tempo; quindi c'è la necessità di strumenti che supportino i test automatici per JavaScript.
Concetti di test automatizzati
È sempre una buona pratica scrivere il test perché migliora il codice; il problema con il test manuale è che richiede un po 'di tempo ed è soggetto a errori. Il processo di test manuale è abbastanza noioso anche per i programmatori poiché devono ripetere il processo, scrivere le specifiche di test, modificare il codice e aggiornare il browser più volte. Inoltre, il test manuale rallenta anche il processo di sviluppo.
Per i motivi di cui sopra, è sempre utile disporre di alcuni strumenti in grado di automatizzare questi test e aiutare i programmatori a sbarazzarsi di questi passaggi ripetitivi e noiosi. Cosa dovrebbe fare uno sviluppatore per rendere automatizzato il processo di test?
Fondamentalmente, uno sviluppatore può implementare il set di strumenti nella CLI (Command Line Interpreter) o nell'IDE di sviluppo (ambiente di sviluppo integrato). Quindi, questi test verranno eseguiti continuamente in un processo separato anche senza l'input dello sviluppatore. Anche i test automatici di JavaScript non sono nuovi e sono stati sviluppati molti strumenti come Karma, Goniometro, CasperJS ecc.
Tipi di test per JavaScript
Possono esserci test diversi per scopi diversi. Ad esempio, alcuni test vengono scritti per verificare il comportamento delle funzioni in un programma, mentre altri vengono scritti per testare il flusso di un modulo o di una funzionalità. Pertanto, abbiamo i seguenti due tipi di test:
Test unitario
Il test viene eseguito sulla parte testabile più piccola del programma chiamata unit. L'unità è fondamentalmente testata in isolamento senza alcun tipo di dipendenza di quell'unità dalle altre parti. In caso di JavaScript, il singolo metodo o funzione che ha un comportamento specifico può essere un'unità di codice e queste unità di codice devono essere testate in modo isolato.
Uno dei vantaggi del test unitario è che il test delle unità può essere eseguito in qualsiasi ordine perché le unità sono indipendenti l'una dall'altra. Un altro vantaggio del test unitario che conta davvero è che può eseguire il test in qualsiasi momento come segue:
- Fin dall'inizio del processo di sviluppo.
- Dopo aver completato lo sviluppo di qualsiasi modulo / funzionalità.
- Dopo aver modificato qualsiasi modulo / funzionalità.
- Dopo aver aggiunto una nuova funzionalità nell'applicazione esistente.
Per i test di unità automatizzati delle applicazioni JavaScript, possiamo scegliere tra molti strumenti e framework di test come Mocha, Jasmine e QUnit.
Test end-to-end
Può essere definita come la metodologia di test utilizzata per verificare se il flusso dell'applicazione dall'inizio alla fine (da un'estremità all'altra) funziona correttamente come da progetto.
Il test end-to-end è anche chiamato test di funzione / flusso. A differenza del test unitario, il test end-to-end verifica il modo in cui i singoli componenti lavorano insieme come un'applicazione. Questa è la principale differenza tra test unitario e test end-to-end.
Ad esempio, supponiamo di avere un modulo di registrazione in cui l'utente deve fornire alcune informazioni valide per completare la registrazione, il test E2E per quel particolare modulo seguirà i seguenti passaggi per completare il test:
- Innanzitutto, caricherà / compilerà il form o il modulo.
- Ora otterrà il DOM (Document object model) degli elementi del form.
- Successivamente, attiva l'evento clic del pulsante di invio per verificare se funziona o meno.
- Ora, a scopo di convalida, raccogliere il valore dai campi di input.
- Successivamente, i campi di input dovrebbero essere convalidati.
- A scopo di test, chiama un'API falsa per archiviare i dati.
Ogni passaggio fornisce i propri risultati che verranno confrontati con il set di risultati atteso.
Ora, la domanda che sorge è, sebbene questo tipo di E2E o test funzionale possa essere eseguito anche manualmente, perché abbiamo bisogno dell'automazione per questo? Il motivo principale è che l'automazione renderà facile questo processo di test. Alcuni degli strumenti disponibili che possono essere facilmente integrati con qualsiasi applicazione, a questo scopo sono Selenium, PhantomJS e Goniometro.
Strumenti e framework di test
Abbiamo vari strumenti e framework di test per i test angolari. Di seguito sono riportati alcuni degli strumenti e dei framework ben noti:
Karma
Karma, creato da Vojta Jina, è un test runner. In origine questo progetto si chiamava Testacular. Non è un framework di test, il che significa che ci dà la possibilità di eseguire facilmente e automaticamente unit test JavaScript su browser reali. Karma è stato creato per AngularJS perché prima di Karma non esisteva uno strumento di test automatizzato per gli sviluppatori JavaScript basati sul web. D'altra parte, con l'automazione fornita da Karma, gli sviluppatori possono eseguire un semplice comando singolo e determinare se un'intera suite di test è stata superata o meno.
Vantaggi dell'utilizzo di Karma
Di seguito sono riportati alcuni vantaggi dell'utilizzo di Karma rispetto al processo manuale:
- Automatizza i test in più browser e dispositivi.
- Monitora i file per errori e li risolve.
- Fornisce supporto e documentazione in linea.
- Facilita l'integrazione con un server di integrazione continua.
Contro dell'uso del karma
I seguenti sono alcuni svantaggi dell'utilizzo di Karma:
Il principale svantaggio dell'utilizzo di Karma è che richiede uno strumento aggiuntivo per la configurazione e la manutenzione.
Se stai usando il test runner Karma con Jasmine, allora è disponibile meno documentazione per trovare informazioni sulla configurazione del tuo CSS nel caso di avere più ID per un elemento.
Gelsomino
Jasmine, un framework di sviluppo basato sul comportamento per testare il codice JavaScript, è stato sviluppato presso Pivotal Labs. Prima dello sviluppo attivo del framework Jasmine, un framework di unit test simile chiamato JsUnit è stato sviluppato anche da Pivotal Labs, che ha un test runner integrato. I test del browser possono essere eseguiti tramite i test Jasmine includendo il file SpecRunner.html o utilizzandolo anche come test runner da riga di comando. Può essere utilizzato anche con o senza Karma.
Vantaggi dell'utilizzo del gelsomino
I seguenti sono alcuni vantaggi dell'utilizzo di Jasmine:
Un framework indipendente da browser, piattaforma e lingua.
Supporta lo sviluppo guidato dai test (TDD) insieme allo sviluppo guidato dal comportamento.
Ha l'integrazione predefinita con Karma.
Sintassi di facile comprensione.
Fornisce spie di test, falsi e funzionalità pass-through che aiutano con i test come funzioni aggiuntive.
Contro dell'utilizzo di Jasmine
Quello che segue è un imbroglio dell'uso di Jasmine:
I test devono essere restituiti dall'utente quando cambiano perché non è disponibile alcuna funzione di controllo dei file in Jasmine durante l'esecuzione del test.
Mocha
Mocha, scritto per le applicazioni Node.js, è un framework di test ma supporta anche il test del browser. È abbastanza simile a Jasmine, ma la differenza principale tra loro è che Mocha ha bisogno di alcuni plugin e librerie perché non può essere eseguito da solo come framework di test. D'altra parte, Jasmine è autonomo. Tuttavia, Mocha è più flessibile da usare rispetto a Jasmine.
Vantaggi dell'utilizzo di Mocha
Di seguito sono riportati alcuni vantaggi dell'utilizzo di Mocha:
- Mocha è molto facile da installare e configurare.
- Documentazione semplice e intuitiva.
- Contiene plugin con diversi progetti di nodi.
Contro dell'utilizzo di Mocha
I seguenti sono alcuni svantaggi dell'utilizzo di Mocha:
- Ha bisogno di moduli separati per affermazioni, spie ecc.
- Richiede anche una configurazione aggiuntiva per l'utilizzo con Karma.
QUnit
QUint, originariamente sviluppato da John Resig nel 2008 come parte di jQuery, è una suite di unit test JavaScript potente ma facile da usare. Può essere utilizzato per testare qualsiasi codice JavaScript generico. Sebbene si concentri sul test di JavaScript nel browser, è tuttavia molto comodo da usare da parte dello sviluppatore.
Vantaggi dell'utilizzo di QUnit
Di seguito sono riportati alcuni vantaggi dell'utilizzo di QUnit:
- Facile da installare e configurare.
- Documentazione semplice e intuitiva.
Contro dell'utilizzo di QUnit
Quello che segue è uno svantaggio dell'utilizzo di QUnit:
- È stato sviluppato principalmente per jQuery e quindi non così buono per l'uso con altri framework.
Selenio
Il selenio, originariamente sviluppato da Jason Huggins nel 2004 come strumento interno di ThoughtWorks, è uno strumento di automazione dei test open source. Il selenio si definisce come “Il selenio automatizza i browser. Questo è tutto!". L'automazione dei browser significa che gli sviluppatori possono interagire con i browser molto facilmente.
Vantaggi dell'utilizzo del selenio
Di seguito sono riportati alcuni vantaggi dell'utilizzo del selenio:
- Contiene un ampio set di funzionalità.
- Supporta test distribuiti.
- Ha il supporto SaaS attraverso servizi come Sauce Labs.
- Facile da usare con semplici documentazioni e ricche risorse disponibili.
Contro dell'uso del selenio
I seguenti sono alcuni svantaggi dell'utilizzo del selenio:
- Uno dei principali svantaggi dell'utilizzo del selenio è che deve essere eseguito come processo separato.
- La configurazione è un po 'macchinosa in quanto lo sviluppatore deve seguire diversi passaggi.