Domanda

Il mio framework JavaScript principale è jQuery , quindi vorrei che il mio test unitario e i framework di derisione fossero compatibili con quello. Preferirei non dover introdurre un altro framework JavaScript.

Attualmente sto usando QUnit per test unitari e Jack per derisione, ma sono abbastanza nuovo per l'intero test unitario di JavaScript.

Qualcun altro ha uno strumento migliore da suggerire? Cosa ha funzionato per te?

È stato utile?

Soluzione

QUnit
jQUnit
Scrivere test JS con QUnit e jQUnit

QUnit è il framework di unit test per il framework jQuery JavaScript. Il framework di test stesso utilizza la libreria jQuery, ma i test possono essere scritti per qualsiasi JavaScript e non richiedono il codice per utilizzare jQuery. JQUnit è una versione modificata di QUnit che aggiunge le funzioni di installazione, smontaggio e asserzione più tipiche di un framework xUnit e incapsula tutto in una variabile globale.

L'interfaccia visiva della pagina testrunner è carina, che ti permette di approfondire e vedere ogni asserzione in ogni metodo di prova. Scrivere test è abbastanza semplice ed è possibile eseguire il codice di test direttamente nella pagina testRunner [8]. Ciò consente test DOM facili e visibili.

QUnit: MIT o GPL (scegli) jQUnit: Licenza MIT

Pro
  - Supporto asincrono
  - Buono per i test DOM
  - I test vengono sempre eseguiti in sequenza nell'ordine in cui vengono aggiunti a una suite
  - Debug sulla pagina di test usando firebug
  - La sintassi è simile a JUnit se si utilizza JQUnit, ma è semplice da imparare se si utilizza QUnit
Contro
  - L'automazione sarebbe difficile da attuare

Altri suggerimenti

Penso che Jack sia il miglior framework beffardo per JavaScript al momento della stesura di questo articolo. Il motivo principale è che ciò che è giusto per JavaScript non è probabilmente ciò che è giusto per un linguaggio fortemente tipizzato come Java.

Molti framework di derisione JavaScript sono ispirati ai framework di simulazione Java (come l'eccellente JsMockito, ad esempio). Ma il problema con questi è che richiedono l'iniezione di dipendenza, perché si tratta dell'unico modo ragionevole di usare il derisione in Java. Ma in JavaScript, ci sono MOLTI modi per usare il derisione e non sei costretto a usare l'iniezione di dipendenza ovunque.

Ad esempio, con JsMockito, devi fare beffe e poi passare quelle beffe in il tuo software sotto test (SUT). Il SUT deve chiamare direttamente le beffe. Pertanto, sei costretto a codificare SUT come costruttore o funzione che accetta tutte le sue dipendenze come parametri. (A volte, questo è un ottimo modo per implementarlo, ma non in tutti i casi. La coda scuote il cane se il design del tuo quadro beffardo forza il tuo approccio all'implementazione).

In JavaScript, è molto facile " dirottare " qualsiasi funzione. Pertanto, ci sono tonnellate di modi per costruire qualcosa in modo tale da poter deridere parti di esso senza iniettare esplicitamente le sue dipendenze in esso. Ad esempio, Jack ti consente di deridere qualsiasi , sia essa pubblica o su un oggetto locale. Da lì puoi spiarlo, stub o esprimere aspettative su di esso. Il punto chiave è questo: dopo aver deriso una funzione, QUALSIASI chiamata a quella funzione originale verrà invece indirizzata verso la tua derisione . In altre parole, le tue beffe verranno comunque utilizzate anche se è stata chiamata la funzione originale e non derisa. Di conseguenza, non sei obbligato a iniettare dipendenze, anche se puoi certamente farlo in quei casi che lo richiedono.

JavaScript è una lingua diversa rispetto a Java (e C #, ecc.). Permette idiomi di implementazione diversi. L'iniezione di dipendenza è ancora uno strumento prezioso nella casella degli strumenti in JavaScript, ma non è più l'unico gioco in città. Il tuo quadro beffardo deve conoscere e rispettare questo fatto. Jack e un paio di altri lo fanno, ma tra quelli che lo fanno, Jack sembra essere il più maturo e ricco di funzionalità.

Non sono sicuro del motivo per cui nessuno ha menzionato JsTestDriver ! Deve essere l'unico strumento di test JS che funziona davvero come ci si aspetterebbe se si utilizzassero strumenti di unit test in altre lingue.

L'esecuzione dei test può essere eseguita senza toccare un browser, è possibile integrarlo con gli IDE, è possibile integrarlo con i sistemi di integrazione continua ... Oh, ed è veloce e può eseguire test in più browser contemporaneamente.

Puoi anche usare altri framework di test come YUITest, rendendolo ancora migliore.

Test YUI
TDD con test YUI

YUI Test è il framework di test per la libreria dell'interfaccia utente di Yahoo. Viene utilizzato da Yahoo per testare la propria libreria e ha una sintassi simile a jUnit.

Come jsUnit, YUI Test viene fornito con una propria console di registrazione in grado di generare informazioni, avvisi ed errori oltre ai risultati di ciascun test.

YUI offre anche la possibilità di inviare rapporti sui risultati in formato JSON o XML.

Il test YUI è concesso in licenza BSD.

Pro
  - Documentazione davvero buona
  - Comunità attiva
  - Rilasci regolari
  - La sintassi è simile a jUnit (test suite, assert e setup / teardown)
  - Supporto asincrono
  - Buono per i test DOM
  - I test vengono sempre eseguiti in sequenza nell'ordine in cui vengono aggiunti a una suite

Contro
  - Automazione non banale da implementare, ma meno difficile di altri framework

Scopri anche http://sinonjs.org/

  

Spie di prova Stub di prova Manichino Temporizzatori falsi XHR falsi Asserzioni sandboxing

Funziona insieme a qUnit e finora è stato un vantaggio.

Questa è una buona recensione dei framework di simulazione disponibili per Javascript:

http://testdrivenwebsite.com/2010/05/ 06 / java-script-mock-quadri-confronto

Abbiamo usato jsspec jsspec . È molto bello se ti piacciono rspec e BDD. Ho appena visto un un articolo di Justin Gehtland sul suo utilizzo " decapitati " anche.

Per deridere in JavaScript, dai un'occhiata a qMock , un framework che un collega e ho scritto per integrare il nostro uso di QUnit. Sebbene quest'ultimo sia ottimo per i unit test, non consente test di logica aziendale / asincrona molto efficaci. Non abbiamo 'taggato' alcuna versione come stabile, ma ci sono alcuni documenti decenti lì, e se dai un'occhiata a svn vedrai che qmock stesso ha dietro di sé test unitari che sono abbastanza autoesplicativi.

Oh, e per automatizzare i test come parte della build abbiamo usato un semplice script di selenio per navigare attraverso la nostra suite di test (una pagina di test per file JS) e 'ascoltato' per una classe CSS pass o fail (aggiunta da QUnit) . Funziona anche senza testa per IE / FF2 AFAIK

Per lo sviluppo di mozilla, mi innamoro di UXU , basato su MozUnit ma ancora attivo. Ha delle belle funzioni come il server finto o metodi sleep / yeld.

Uso il framework di test delle unità a vite e ho scritto la mia libreria di derisione chiamata jsMocha che è stato ampiamente utilizzato nell'azienda in cui lavoro da oltre 6 mesi.

So che stai chiedendo framework compatibili con JQuery, ma voglio lanciare script.aculo.us nel mix per completezza. Hanno una unit test che non è male.

CrossCheck sembrava estremamente potente quando l'ho guardato, ma al momento non l'abbiamo incorporato nel nostro processo di creazione. Ha il vantaggio di essere senza browser e quindi dovrebbe funzionare bene in uno scenario di build-and-test automatizzato.

http://thefrontside.net/crosscheck

Potresti provare HtmlUnit che aveva un versione compatibile con JQuery oltre un anno fa.

Il vantaggio di HtmlUnit è che non sta guidando un browser, quindi è VELOCE.

Il rovescio della medaglia è che non sta guidando un browser, quindi ci sono alcune cose di JS che non funzioneranno. Ma compensando che possono eseguire i test JQuery in modo che il supporto JS potrebbe essere abbastanza buono per quello che ti serve.

JsUnit viene eseguito dal browser, tramite il suo plug-in Eclipse, o automaticamente tramite un Compito ANT. Si crea una pagina HTML con una serie di funzioni di test, che devono essere denominate con il prefisso "test", includendo il file JS che si sta testando. Quando un'asserzione all'interno di una funzione fallisce, l'intera funzione fallisce e interrompe l'esecuzione. Non esiste un ordine garantito per l'esecuzione di questi test. Puoi creare le funzioni setup () e teardown () .

Licenza: GPL, GLPL, MPL

Pro

  • L'automazione è relativamente facile da implementare
  • Molte funzionalità
  • La sintassi è simile a JUnit

Contro

  • Non eccezionale per i test DOM poiché esegue test all'interno di un iFrame.
  • Nessuna garanzia che i test verranno eseguiti nell'ordine in cui sono scritti.
  • Impossibile utilizzare Firebug sulla pagina testrunner. È necessario avere un'altra scheda aperta con il codice di test effettivo.
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top