Strumenti di test unitari JavaScript per TDD


716

Ho esaminato e considerato molti test unitari JavaScript e strumenti di test, ma non sono stato in grado di trovare un'opzione adatta per rimanere pienamente conforme a TDD. Quindi, esiste uno strumento di test di unità JavaScript completamente conforme a TDD?

Risposte:


1506

Karma o goniometro

Karma è un test-runner JavaScript creato con Node.js e pensato per test unitari.

Il goniometro è destinato ai test end-to-end e utilizza Selenium Web Driver per condurre i test.

Entrambi sono stati realizzati dalla squadra angolare. Puoi usare qualsiasi libreria di asserzioni che desideri con entrambi.

Screencast: Karma Per iniziare

correlati :

pro :

  • Utilizza node.js, quindi compatibile con Win / OS X / Linux
  • Esegui test da un browser o senza testa con PhantomJS
  • Esegui su più client contemporaneamente
  • Opzione per avviare, acquisire e arrestare automaticamente i browser
  • Opzione per eseguire server / client sul computer di sviluppo o separatamente
  • Esegui test da una riga di comando (può essere integrato in ant / maven)
  • Scrivi test xUnit o stile BDD
  • Supporta più framework di test JavaScript
  • Test di esecuzione automatica al salvataggio
  • Proxy richieste tra domini
  • Possibile personalizzare:
    • Estenderlo per avvolgere altri framework di test (Jasmine, Mocha, QUnit integrati)
    • Le tue affermazioni / confutazioni
    • Reporters
    • Browser Launcher
  • Plugin per WebStorm
  • Supportato da Netbeans IDE

Contro :

mocha.js

Non sono assolutamente qualificato per commentare le caratteristiche, i punti di forza e di debolezza di mocha.js, ma mi è stato consigliato da qualcuno di cui mi fido nella comunità JS.

Elenco delle funzionalità, come riportato dal suo sito Web:

  • supporto del browser
  • semplice supporto asincrono, comprese le promesse
  • report di copertura test
  • supporto per diff stringa
  • API javascript # per l'esecuzione di test
  • stato di uscita corretto per supporto CI ecc
  • rileva automaticamente e disabilita la colorazione per i non-tty
  • associa eccezioni non rilevate al caso di test corretto
  • supporto del timeout del test asincrono
  • timeout specifici del test
  • supporto per le notifiche ringhio
  • riporta la durata dei test
  • evidenzia test lenti
  • supporto per l'osservatore di file
  • rilevamento di perdite variabili globali
  • facoltativamente eseguire test che corrispondono a una regexp
  • auto-uscita per evitare il "blocco" con un loop attivo
  • meta-generare facilmente suite e casi di test
  • Supporto per il file mocha.opts
  • titoli suite selezionabili per filtrare l'esecuzione del test
  • supporto del debugger del nodo
  • rileva più chiamate a done ()
  • utilizzare qualsiasi libreria di asserzioni desiderata
  • rapporti estensibili, in bundle con oltre 9 giornalisti
  • test estensibili DSL o "interfacce"
  • prima, dopo, prima di ciascuno, dopo ogni gancio
  • supporto transpiler arbitrario (sceneggiatura caffè ecc.)
  • Bundle TextMate

yolpo

yolpo

Questo non esiste più, reindirizza invece a sequential.js

Yolpo è uno strumento per visualizzare l'esecuzione di javascript. Gli sviluppatori di API JavaScript sono incoraggiati a scrivere i loro casi d'uso per mostrare e dire alla loro API. Tali casi d'uso costituiscono la base dei test di regressione.

AVA

Logo AVA

Runner futuristico con supporto integrato per ES2015. Anche se JavaScript è a thread singolo, l'IO in Node.js può avvenire in parallelo a causa della sua natura asincrona. AVA ne approfitta ed esegue i test contemporaneamente, il che è particolarmente vantaggioso per i test pesanti IO. Inoltre, i file di test vengono eseguiti in parallelo come processi separati, offrendo prestazioni ancora migliori e un ambiente isolato per ogni file di test.

  • Minimo e veloce
  • Sintassi del test semplice
  • Esegue i test contemporaneamente
  • Impone la scrittura di test atomici
  • Nessun globale implicito
  • Ambiente isolato per ciascun file di prova
  • Scrivi i tuoi test in ES2015
  • Supporto promettente
  • Supporto della funzione del generatore
  • Supporto della funzione asincrona
  • Supporto osservabile
  • Affermazioni avanzate
  • TAP o utput opzionale
  • Pulire le tracce dello stack

Buster.js

Un test-runner JavaScript creato con Node.js. Molto modulare e flessibile. Viene fornito con una propria libreria di asserzioni, ma puoi aggiungere la tua se vuoi. La libreria delle asserzioni è disaccoppiata, quindi puoi usarla anche con altri test runner. Invece di usare assert(!...)o expect(...).not..., usa refute(...)quale è una bella impressione.

Un toolkit di test JavaScript del browser. Esegue i test del browser con l'automazione del browser (pensate a JsTestDriver), i test delle pagine HTML statiche in stile QUnit, i test nei browser senza testa (PhantomJS, jsdom, ...) e altro. Dai un'occhiata alla panoramica !

Un toolkit di test Node.js. Ottieni la stessa libreria di casi di test, libreria di asserzioni, ecc. Questo è ottimo anche per browser ibrido e codice Node.js. Scrivi il tuo caso di test con Buster.JS ed eseguilo sia in Node.js che in un browser reale.

Screencast: Buster.js Guida introduttiva (2:45)

pro :

  • Utilizza node.js, quindi compatibile con Win / OS X / Linux
  • Esegui test da un browser o senza testa con PhantomJS (presto)
  • Esegui su più client contemporaneamente
  • Supporta i test NodeJS
  • Non è necessario eseguire server / client sul computer di sviluppo (non è necessario IE)
  • Esegui test da una riga di comando (può essere integrato in ant / maven)
  • Scrivi test xUnit o stile BDD
  • Supporta più framework di test JavaScript
  • Rinvia i test invece di commentarli
  • SinonJS integrato
  • Test di esecuzione automatica al salvataggio
  • Proxy richieste tra domini
  • Possibile personalizzare:
    • Estenderlo per avvolgere altri framework di test (JsTestDriver integrato)
    • Le tue affermazioni / confutazioni
    • Reporter (xUnit XML, punti tradizionali, specifiche, tocco, TeamCity e altro integrato)
    • Personalizza / sostituisci il codice HTML utilizzato per eseguire i test del browser
  • Integrazione TextMate ed Emacs

Contro :

  • Inserisci in beta in modo che possa essere buggy
  • Nessun plugin per Eclipse / IntelliJ (ancora)
  • Non raggruppa i risultati per os / browser / versione come TestSwarm *. Tuttavia, stampa il nome e la versione del browser nei risultati del test.
  • Nessuna cronologia dei risultati dei test precedenti come TestSwarm *
  • Non funziona completamente su Windows a partire da maggio 2014

* TestSwarm è anche un server di integrazione continua, mentre per Buster.js è necessario un server CI separato. Tuttavia, genera report XML xUnit, quindi dovrebbe essere facile da integrare Hudson , Bamboo o altri server CI.

TestSwarm

https://github.com/jquery/testswarm

TestSwarm non è più ufficialmente in fase di sviluppo attivo, come indicato nella sua pagina web GitHub. Raccomandano Karma, corridore di browser o stagista.

Gelsomino

Gelsomino

Questo è un framework basato sul comportamento (come indicato nella citazione seguente) che potrebbe interessare gli sviluppatori che hanno familiarità con Ruby o Ruby on Rails. La sintassi si basa su RSpec che viene utilizzata per i test nei progetti Rails.

Le specifiche di Jasmine possono essere eseguite da una pagina html (in modo qUnit) o ​​da un test runner (come Karma).

Jasmine è un framework di sviluppo basato sul comportamento per testare il tuo codice JavaScript. Non dipende da nessun altro framework JavaScript. Non richiede un DOM.

Se hai esperienza con questo framework di test, contribuisci con maggiori informazioni :)

Home del progetto: http://jasmine.github.io/

QUnit

QUnit si concentra sul test di JavaScript nel browser fornendo al contempo la massima praticità allo sviluppatore. Blurb dal sito:

QUnit è una suite di test di unità JavaScript potente e facile da usare. È utilizzato dai progetti jQuery, jQuery UI e jQuery Mobile ed è in grado di testare qualsiasi codice JavaScript generico

QUnit condivide un po 'di cronologia con TestSwarm (sopra):

QUnit è stato originariamente sviluppato da John Resig come parte di jQuery. Nel 2008 ha ottenuto la propria documentazione di casa, nome e API, consentendo ad altri di utilizzarlo anche per i test delle unità. All'epoca dipendeva ancora da jQuery. Una riscrittura nel 2009 ha risolto il problema, ora QUnit è completamente autonomo. I metodi di asserzione di QUnit seguono le specifiche del test unitario CommonJS, che è stato in qualche modo influenzato da QUnit.

Home del progetto: http://qunitjs.com/

Sinon

Un altro ottimo strumento è sinon.js di Christian Johansen, l'autore di Test-Driven JavaScript Development . Meglio descritto da solo:

Spie di test indipendenti, tronconi e simulazioni per JavaScript. Nessuna dipendenza funziona con qualsiasi framework di test unitari.

Stagista

Il sito Web dello stagista fornisce un confronto diretto delle funzionalità con gli altri framework di test in questo elenco. Offre più funzionalità predefinite rispetto a qualsiasi altro sistema di test basato su JavaScript.

SCHERZARE

Un nuovo ma potente framework di test. Consente anche i test basati su istantanee, aumentando la velocità di test e creando una nuova dinamica in termini di test

Dai un'occhiata a uno dei loro discorsi: https://www.youtube.com/watch?v=cAKYQpTC7MA

Meglio ancora: per iniziare


2
Jasmine può funzionare senza testa usando V8, ma puoi anche usarlo in modo interattivo. Sebbene il DOM non sia necessario rispetto a Jasmine, la tua base di codice potrebbe accedere al DOM. Con disciplina è possibile eliminare, difendersi dalle condizioni o fornire simulazioni per parti del codice che accedono al DOM ed eseguono test completamente a parte i dispositivi HTML. È inoltre possibile ottenere supporto e dispositivi da riga di comando utilizzando i componenti aggiuntivi.
Jerseyboy,

2
@ rehevkor5: il selenio è per i test di integrazione, mentre gli strumenti qui sono per i test unitari. typemock.com/unit-tests-integration-tests
gregers

26
Quasi ogni singolo test runner si basa su un browser. A proposito, nessuno ha mai eseguito test unitari solo sul lato server ????

2
Non sarebbe meglio dividere / dividere ogni alternativa in risposte diverse? Potrebbe invalidare i voti attuali su questo, ma penso che avrebbe più senso.
Cregox,

2
@Raisen Puoi collegare ES 2015 nella maggior parte di essi con Babel , ma AVA di Sindre Sorhus lo ha incorporato.
Gregers

64

Dai un'occhiata al framework di test unità Dojo Object Harness (DOH) che è praticamente un cablaggio indipendente dal framework per i test di unità JavaScript e non ha dipendenze Dojo. C'è una descrizione molto buona di questo nelle unità di test Web 2.0 che utilizzano il cablaggio Dojo Objective .

Se vuoi automatizzare il test dell'interfaccia utente (un punto dolente di molti sviluppatori), controlla doh.robot (aggiornamento temporaneo inattivo: altro link http://dojotoolkit.org/reference-guide/util/dohrobot.html ) e dijit .robotx (temporaneamente inattivo) . Quest'ultimo è progettato per un test di accettazione. Aggiornare:

Gli articoli di riferimento spiegano come usarli, come emulare un utente che interagisce con la tua UI usando il mouse e / o la tastiera e come registrare una sessione di test, in modo da poterlo "giocare" automaticamente in seguito.


Grazie per il suggerimento di Dojo Object Harness, non l'avrei mai trovato. Apprezzo gli altri suggerimenti, ma un passo alla volta.
Mark Levison,

In realtà l'ho usato in un precedente progetto e l'ho trovato prezioso. Ma ancora una volta, non posso confrontare - non ho usato nessun altro framework TDD.
Rakesh Pai,

Grazie per aver segnalato link non funzionanti. Ho aggiornato uno di questi e sostituirò i collegamenti ai documenti dei robot non appena saranno disponibili su un nuovo sito Web.
Eugene Lazutkin,

Una cosa che non mi piace di DOH è che i numeri di riga non vengono riportati quando le asserzioni falliscono. Commentandoli manualmente e rieseguendo il test funziona.
Aram Kocharyan,

Dojo sta sostituendo DOH con il framework di test TheIntern. L'Internet è molto potente e presenta miglioramenti sostanziali. sitepen.com/blog/2014/02/18/…
user64141

34

Chutzpah - Un test runner JavaScript

Ho creato un progetto open source chiamato Chutzpah che è un test runner per i test unitari JavaScript. Chutzpah ti consente di eseguire unit test JavaScript dalla riga di comando e dall'interno di Visual Studio. Supporta anche l'esecuzione nel server di integrazione continua TeamCity.


7
Ho appena iniziato a usare Chutzpah per eseguire i test Jasmine all'interno di Visual Studio: è ben integrato: fai clic con il pulsante destro del mouse sul file di test e scegli "esegui test js" o "esegui test JS nel browser". Eseguo gli stessi test di gelsomino usando JSTestDriver. Preferisco Chutzpah perché specifica quali file dipendo dal caricamento nella parte superiore del file di test. Per JSTestDriver ho bisogno di un file di configurazione separato.
GarethOwen,


14

BusterJS

C'è anche BusterJS di Christian Johansen, l'autore di Test Driven Javascript Development e il framework Sinon. Dal sito:

Buster.JS è un nuovo framework di test JavaScript. Esegue i test del browser automatizzando le esecuzioni dei test nei browser effettivi (pensate a JsTestDriver), nonché i test Node.js.


10

google-JS-test:

Framework di test JavaScript rilasciato da Google: https://github.com/google/gjstest

  • Tempi di avvio e di esecuzione dei test estremamente rapidi, senza dover eseguire un browser.
  • Output pulito e leggibile in caso di test superati e non riusciti.
  • Un test runner basato su browser che può essere semplicemente aggiornato ogni volta che JS viene modificato.
  • Stile e semantica simili a Google Test per C ++.
  • Un framework di derisione incorporato che richiede un codice minimo di plateplate (ad es. No $tearDowno $verifyAll) con stile e semantica basati su Google C ++ Mocking Framework .

Al momento non ci sono file binari per Windows


1
Sembra avere un interesse quasi nullo su Github, inoltre richiede un sistema operativo unix-base, e sono un grande fan di Windows, non esco di casa senza salutare la mia macchina Windows.
vsync,

8

Ora stiamo usando Qunit con Pavlov e JSTestDriver tutti insieme. Questo approccio funziona bene per noi.

QUnit

Pavlov , fonte

jsTestDriver , fonte


Ti andrebbe di spiegare qual è il ruolo in ognuno di questi nell'intero processo di test e come si collegano tra loro?
vsync,

Mi dispiace che sia passato molto tempo e molti lavori su contratto fa ricordare i dettagli su questo.
Tom Stickel,

6

Hai "corre sul browser reale" come professionista, ma nella mia esperienza è un contro perché è lento. Ma ciò che lo rende prezioso è la mancanza di un'emulazione JS sufficiente dalle alternative non browser. Potrebbe essere che se il tuo JS è abbastanza complesso che basterà solo un test nel browser, ma ci sono un paio di opzioni da considerare:

HtmlUnit : "Ha un supporto JavaScript abbastanza buono (che è in costante miglioramento) ed è in grado di funzionare anche con librerie AJAX piuttosto complesse, simulando Firefox o Internet Explorer a seconda della configurazione che si desidera utilizzare." Se la sua emulazione è abbastanza buona per l'uso, sarà molto più veloce della guida di un browser.

Ma forse HtmlUnit ha abbastanza supporto JS ma non ti piace Java? Quindi forse:

Celerità : API Watir in esecuzione su JRuby supportata da HtmlUnit.

o similmente

Schnell : un altro wrapper JRuby di HtmlUnit.

Naturalmente se HtmlUnit non è abbastanza buono e devi guidare un browser, allora potresti considerare Watir per guidare il tuo JS .



3

Potresti anche essere interessato al framework di unit testing che fa parte di qooxdoo , un framework RIA open source simile a Dojo, ExtJS, ecc. Ma con una catena di strumenti piuttosto completa.

Prova la versione online del testrunner . Suggerimento: premi la freccia grigia in alto a sinistra (dovrebbe essere reso più evidente). È un pulsante "Riproduci" che esegue i test selezionati.

Per ulteriori informazioni sulle classi JS che consentono di definire i test delle unità, consultare il visualizzatore di API online .

Per i test UI automatizzati (basati su Selenium RC), controlla il progetto Simulator .



3

Abbiamo aggiunto l'integrazione di JUnit al nostro generatore di codice Java-Javascript ST-JS ( http://st-js.org ). Il framework genera Javascript corrispondente sia per il codice testato che per i test unitari e invia il codice a diversi browser.

Non è necessario un server separato poiché il runner di unit test apre la porta http necessaria (e la chiude al termine dei test). Il framework manipola lo stacktrace Java in modo che gli asserzioni non riuscite vengano visualizzati correttamente dal plug-in JUnit Eclipse. Ecco un semplice esempio con jQuery e Mockjax:

@RunWith(STJSTestDriverRunner.class)
@HTMLFixture("<div id='fortune'></div>")

@Scripts({ "classpath://jquery.js",
       "classpath://jquery.mockjax.js", "classpath://json2.js" })
public class MockjaxExampleTest {
  @Test
  public void myTest() {
    $.ajaxSetup($map("async", false));
    $.mockjax(new MockjaxOptions() {
      {
        url = "/restful/fortune";
        responseText = new Fortune() {
          {
            status = "success";
            fortune = "Are you a turtle?";
          }
        };
      }
    });

    $.getJSON("/restful/fortune", null, new Callback3<Fortune, String, JQueryXHR>() {
      @Override
      public void $invoke(Fortune response, String p2, JQueryXHR p3) {
        if (response.status.equals("success")) {
          $("#fortune").html("Your fortune is: " + response.fortune);
        } else {
          $("#fortune").html("Things do not look good, no fortune was told");
        }

      }
    });
    assertEquals("Your fortune is: Are you a turtle?", $("#fortune").html());
  }

  private static class Fortune {
    public String status;
    public String fortune;
  }
}

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.