wake-up-neo.com

Karma gegen Testframework Jasmine, Mocha, QUnit

Einige Fragen:

  • In welcher Beziehung stehen Karma und Testing Framework X (Jasmine, Mocha, QUnit) zueinander?
  • Was ist das äquivalente Framework bei Java world? Ich nehme an, Jasmine, Mocha, QUnit sind gleich jUnit/TestNG. Wie steht es mit Karma?
  • Kann ich das Testframework X (z. B. Jasmine) ohne Karma ausführen?
  • Ist Karma für Unit-Test oder Integration/E2E-Test? Diese Referenz zeigt ist für Unit-Test, aber diese ist für E2E-Test.
246
Lee Chee Kiam

Karma ist ein Browser-Testläufer.

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

  • starten eines kleinen Webservers, um zu testende "clientseitige" Javascript-Dateien bereitzustellen (1)
  • servieren Sie auch die "clientseitigen" Javascript-Dateien mit den Tests (oder Spezifikationen, wie sie oft genannt werden) (2)
  • eine benutzerdefinierte Webseite bereitstellen, auf der Javascript-Code für die Tests ausgeführt wird (3)
  • starte einen Browser um diese Seite zu laden (4)
  • die Testergebnisse dem Server melden (5)
  • karma kann die Ergebnisse dann erneut in Textdateien, auf der Konsole, auf jedem beliebigen CI-Server usw. anzeigen.

Betrachten Sie jeden Teil:

(1) Diese Dateien sind Ihre eigentlichen js-Dateien. Sie werden Karma sagen, wie es geladen werden soll. Wenn Sie requirejs verwenden, gibt es ein Karma-Plugin und es wird eine Konfiguration benötigt.

(2) Diese Tests können in verschiedenen Javascript-Testframeworks (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.

So beantworten Sie Ihre Fragen:

  • 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 zu unterscheiden, in der Tests ausgeführt werden, und die Umgebung, in der Testberichte zusammengefasst werden. 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 folgen Sie den Anweisungen. Der Vorteil von Karma ist, dass es eine sofort einsatzbereite Lösung bietet, wenn Sie sich in einer Standardkonfiguration befinden.
  • Karma kann sowohl für Komponententests (mit Jasmin/Qunit/was auch immer) als auch für Integrationstests (die eine andere API wie Webdriver verwenden, um den Browser zu steuern) verwendet werden.
400
phtrivier

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

Personen, die mit normalem Jasmine/Mocha testen, führen höchstwahrscheinlich den gesamten Code mit der virtuellen Maschine Node 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 Browser-Umgebung 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 (wie Dateisystem-/Shell-Zugriff) bereitgestellt werden.

65
SystematicFrank

Die These des Mannes, der Karma entwarf, war sehr informativ, indem er bestehende Lösungen beschrieb und sie verglich und natürlich Karma selbst beschrieb

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 gegenüber anderen Testläufern Vorteile, um Ihren TDD/BDD-Entwicklungszyklus zu verbessern. Es "überwacht" Dateien. Wenn Sie also eine Änderung speichern, führt Karma sofort Tests aus und meldet sich zurück, ohne den Kontext zum Ausführen des Tests in den Webbrowser zu wechseln.

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

32
mauricio777