Karma vs testing framework Jasmine, Mocha, QUnit [chiuso]


258

Poche domande:

  • In che modo Karma e framework di test X (Jasmine, Mocha, QUnit) si relazionano tra loro?
  • Qual è il framework equivalente nel mondo Java? Presumo Jasmine, Mocha, QUnit pari a jUnit / TestNG. Che ne dici di Karma?
  • Posso eseguire il framework di test X (ad es. Jasmine) senza Karma?
  • Karma è per unit test o integrazione / e2e test? Questo riferimento mostra che è per il test unitario, tuttavia ciò è detto per il test e2e.

Risposte:


419

Karma è un test runner per browser.

L'idea è che i browser non abbiano un concetto nativo di caricamento dei file di test, esecuzione e report dei risultati. Ciò che fa il karma è (approssimativamente):

  • avvio di un piccolo web server per servire file javascript "lato client" da testare (1)
  • servono anche i file javascript "lato client" con i test (o le specifiche, come vengono spesso chiamati) (2)
  • servire una pagina web personalizzata che eseguirà il codice javascript per i test (3)
  • avvia un browser per caricare questa pagina (4)
  • riporta i risultati del test al server (5)
  • karma può quindi riportare nuovamente i risultati su file di testo, console, qualsiasi cosa piaccia al tuo server CI, ecc ...

Guardando ogni parte:

(1) Quei file saranno i tuoi file js attuali; dirai al karma come caricarli. Se si utilizza requestjs, c'è un plugin karma e sono necessarie alcune configurazioni.

(2) Questi test possono essere scritti in una varietà di framework di test Javascript (Jasmine, QUnit, Mocha); questo è il codice JS che viene eseguito nel browser.

(3) La pagina Web personalizzata sarà leggermente diversa per ciascun framework di test; questo è il motivo per cui karma ha plugin per diversi framework.

(4) Karma può avviare la pagina in molti browser (FF, Chrome o browser senza testa come PhantomJs.)

(5) I rapporti sul karma dipendono, ancora una volta, dal framework e vengono trattati con i plugin del karma.

Quindi, per rispondere alle tue domande:

  • in Java, la maggior parte delle persone usa JUnit, che è sia un framework per scrivere test ed eseguirli, ma non ha il problema di differenziare l'ambiente in cui vengono eseguiti i test e quello in cui vengono aggregati i report dei test; il karma sarebbe il pezzo mancante tra una JUnit Suite e un JUnit TestRunner
  • Sì, puoi fare tutto ciò che il karma fa "a mano": scegli un quadro (gelsomino, qunit, moka) e segui le istruzioni. Il vantaggio del karma è che fornisce una soluzione pronta all'uso, se si è in una configurazione standard.
  • Karma può essere utilizzato sia per test unitari (con jasmine / qunit / qualunque) sia per test di integrazione (che utilizzerà un'altra API, come webdriver, per guidare il browser)

59
Questo merita un post sul blog o qualcosa del genere.
Willa,

Karma può avviare la pagina in molti browser (FF, Chrome o browser senza testa come PhantomJs.)? anche Jasmine ha ragione? possiamo testarlo su molti framework e scegliere quella configurazione in conf js
Wang'l Pakhrin,

1
@ Wang'lPakhrin Puoi ovviamente usare il gelsomino con (m) qualsiasi browser. Ciò che intendevo dire era che, tecnicamente, karma può avviare (m) qualsiasi browser in cui si desidera testare. Al momento della stesura di questo articolo, il gelsomino non era responsabile dell'avvio effettivo dei browser (ancora non credo lo faccia.) Sperando che chiarisca le cose!
phtrivier,


1
@Willa Ho fatto un video di YouTube basato su questa risposta youtube.com/watch?v=bJc078szrZA :)
bersling

70

Un modo più breve per capire la differenza:

Le persone che stanno testando con Jasmine / Mocha molto probabilmente eseguono tutto il codice con la macchina virtuale Node.

L'aggiunta di Karma al mix (oltre al framework esistente scelto) eseguirà la suite di test con il motore di altri browser.

In questo modo ottieni i piccoli extra che ottieni con un ambiente browser. Sarà più facile testare il codice relativo al DOM, ma ti arrenderai anche alle risorse extra fornite dal motore Node (come l'accesso al filesystem / shell)


34

La tesi del ragazzo che ha progettato il Karma è stata molto istruttiva nel descrivere le soluzioni esistenti e nel confrontarle, e ovviamente nel descrivere il Karma stesso

https://github.com/karma-runner/karma/blob/master/thesis.pdf

Riepilogo: Karma è un corridore di prova. Può essere utilizzato da QUnit, Jasmine, Mocha, ... Karma offre vantaggi ad altri corridori di test per migliorare il ciclo di sviluppo TDD / BDD. "Guarda" i file, quindi quando salvi una modifica, Karma esegue i test e riporta all'istante, senza passare dal contesto al browser Web per eseguire il test.

In breve, forse la domanda dovrebbe essere Karma AND Jasmine o Mocha o QUnit?


2
Potresti un piccolo riassunto, dal link. Ciò migliora la tua risposta
winner_joiner il

1
Il karma può eseguire i test Jest?
SuperUberDuper,

puoi guardare anche in Jasmine? penso di sì, ma non mi ricordo tranquillo.
Wang'l Pakhrin,

@ Wang'l Pakhrin Non so che Jasmine ha una funzionalità di orologio, io uso solo nodemon. "nodemon --exec jasmine" e ogni volta che salvi un file eseguirà i test.
snowfrogdev

La tesi non menziona Jasmine.
Carl G,
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.