Karma vs Test Framework Jasmine, Mocha, QUnit [geschlossen]

258

Einige Fragen:

  • In welcher Beziehung stehen Karma und Testframework X (Jasmine, Mocha, QUnit) zueinander?
  • Was ist das äquivalente Framework in der Java-Welt? Ich gehe davon aus, dass Jasmine, Mocha, QUnit gleich jUnit / TestNG sind. Wie wäre es mit Karma?
  • Kann ich Testframework X (z. B. Jasmine) ohne Karma ausführen?
  • Ist Karma für Unit-Test oder Integration / e2e-Test? Diese Referenz zeigt, dass es sich um einen Komponententest handelt , dies gilt jedoch für den e2e-Test.
Lee Chee Kiam
quelle
Wir führen Mokka ohne Karma aus, aber viele Entwickler verwenden mehrere Test-Frameworks
the_red_baron

Antworten:

419

Karma ist ein Browser-Testläufer.

Die Idee ist, dass Browser nicht von Haus aus das Konzept haben, Testdateien zu laden, auszuführen und Ergebnisse zu melden. Was Karma tut, ist (ungefähr):

  • Starten eines kleinen Webservers zur Bereitstellung von "clientseitigen" zu testenden Javascript-Dateien (1)
  • Stellen Sie auch die "clientseitigen" Javascript-Dateien mit den Tests (oder Spezifikationen, wie sie oft genannt werden) bereit (2)
  • eine benutzerdefinierte Webseite bereitstellen, auf der Javascript-Code für die Tests ausgeführt wird (3)
  • Starten Sie einen Browser, um diese Seite zu laden (4)
  • Melden Sie die Testergebnisse dem Server (5).
  • Karma kann die Ergebnisse dann erneut an Textdateien, die Konsole, alles, was Ihr CI-Server mag, usw. melden.

Betrachten Sie jeden Teil:

(1) Diese Dateien sind Ihre tatsächlichen JS-Dateien. Sie werden Karma sagen, wie man sie lädt. Wenn Sie requirejs verwenden, gibt es ein Karma-Plugin und einige Konfigurationen sind erforderlich.

(2) Diese Tests können in einer Vielzahl von Javascript-Testrahmen (Jasmine, QUnit, Mocha) geschrieben werden. Dies ist JS-Code, der im Browser ausgeführt wird.

(3) Die benutzerdefinierte Webseite ist für jedes Testframework etwas anders. Aus diesem Grund hat Karma Plugins für verschiedene Frameworks.

(4) Karma kann die Seite in vielen Browsern (FF, Chrome oder Headless-Browsern wie PhantomJs) starten.

(5) Die Berichterstattung an Karma ist wiederum rahmenabhängig und wird mit Karma-Plugins behandelt.

Um Ihre Fragen zu beantworten:

  • In Java verwenden die meisten Benutzer JUnit, das sowohl ein Framework zum Schreiben als auch zum Ausführen von Tests ist, jedoch nicht das Problem hat, die Umgebung, in der Tests ausgeführt werden, und die Umgebung, in der Testberichte aggregiert werden, zu unterscheiden. Karma wäre das fehlende Teil zwischen einer JUnit Suite und einem JUnit TestRunner
  • Ja, Sie können alles tun, was Karma "von Hand" tut - wählen Sie ein Gerüst (Jasmin, Qunit, Mokka) und befolgen Sie die Anweisungen. Der Vorteil von Karma besteht darin, dass es eine sofort einsatzbereite Lösung bietet, wenn Sie sich in einem Standard-Setup befinden.
  • Karma kann sowohl für Unit-Tests (mit Jasmin / Qunit / was auch immer) als auch für Integrationstests (bei denen eine andere API wie ein Webdriver verwendet wird, um den Browser zu steuern) verwendet werden.
phtrivier
quelle
59
Dies verdient einen Blog-Beitrag oder so.
Willa
Karma kann die Seite in vielen Browsern starten (FF, Chrome oder Headless-Browser wie PhantomJs). Also stimmt Jasmine? Wir können es auf vielen Frameworks testen und dieses Setup in conf js auswählen
Wang'l Pakhrin
1
@ Wang'lPakhrin Sie können Jasmin natürlich mit (m) jedem Browser verwenden. Was ich damit meinte war, dass Karma technisch gesehen (m) alle Browser starten kann, in denen Sie testen möchten. Zum Zeitpunkt des Schreibens war Jasmin nicht dafür verantwortlich, Browser tatsächlich zu starten (ich glaube immer noch nicht, dass dies der Fall ist). Ich hoffe, es klärt die Dinge!
Phtrivier
thejsguy.com/2015/01/12/jasmine-vs-mocha-chai-and-sinon.html "Jasmin gegen Mokka, Chai und Sinon"
entkommen Katze
1
@Willa Ich habe ein YouTube-Video basierend auf dieser Antwort erstellt youtube.com/watch?v=bJc078szrZA :)
Bersling
70

Ein kürzerer Weg, um den Unterschied zu verstehen:

Leute, die mit einfachem Jasmin / Mokka testen, führen höchstwahrscheinlich den gesamten Code mit der virtuellen Node-Maschine aus.

Durch Hinzufügen von Karma zum Mix (zusätzlich zu dem vorhandenen Framework Ihrer Wahl) wird Ihre Testsuite mit der Engine anderer Browser ausgeführt.

Auf diese Weise erhalten Sie die kleinen Extras, die Sie mit einer Browserumgebung erhalten. Es wird einfacher sein, DOM-bezogenen Code zu testen, aber Sie werden auch auf die zusätzlichen Ressourcen verzichten, die von der Node-Engine bereitgestellt werden (wie Dateisystem- / Shell-Zugriff).

SystematicFrank
quelle
34

Die These desjenigen, der Karma entworfen hat, war sehr informativ darin, bestehende Lösungen zu beschreiben und zu vergleichen und natürlich Karma selbst zu beschreiben

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

Zusammenfassung: Karma ist ein Testläufer. Es kann von QUnit, Jasmine, Mocha, ... verwendet werden. Karma hat Vorteile gegenüber anderen Testläufern, um Ihren TDD / BDD-Entwicklungszyklus zu verbessern. Es "überwacht" Dateien. Wenn Sie also eine Änderung speichern, führt Karma Tests aus und meldet sich sofort zurück, ohne den Kontext zum Webbrowser zu wechseln, um den Test auszuführen.

Kurz gesagt, vielleicht sollte die Frage Karma UND Jasmin oder Mokka oder QUnit sein?

mauricio777
quelle
2
Könnten Sie eine kleine Zusammenfassung aus dem Link. Das verbessert Ihre Antwort
Gewinner_Joiner
1
Kann Karma Scherztests durchführen?
SuperUberDuper
Sie können auch in Jasmine sehen? Ich denke schon, aber ich erinnere mich nicht ruhig.
Wang'l Pakhrin
@ Wang'l Pakhrin Ich weiß nicht, dass Jasmine eine Uhrenfunktion hat, ich benutze nur Nodemon. "nodemon --exec jasmine" und jedes Mal, wenn Sie eine Datei speichern, werden die Tests ausgeführt.
Snowfrogdev
Die These erwähnt Jasmine nicht.
Carl G