Sollte ich Winkelmesser oder Karma für meine End-to-End-Tests verwenden? [geschlossen]

124

Sollte ich Winkelmesser oder Karma für meine End-to-End-Tests verwenden?

Angular-Seed verwendet Protractor / Selenium WebDriver für E2E, aber das Angular-Phonecat-Tutorial verwendet Karma.

Ich habe gelesen, dass ich Karma für Unit-Tests und Winkelmesser für E2E verwenden sollte, was in Ordnung zu sein scheint, aber ich dachte, ich würde hier nachfragen, um die Meinung anderer Entwickler zu erfahren.

screenm0nkey
quelle
1
Besser geeignet für Softwareempfehlungen . Wenn Sie diese Frage dort stellen, müssen Sie jedoch Ihre Anforderungen erläutern. Verwandte Meta
Professor Allman
5
Karma und Winkelmesser werden beide vom Angular-Team verwendet und empfohlen, aber angesichts des Standes der Dokumentation (dh es gibt Unmengen davon und es ist schwierig zu wissen, was aktuell ist) ist es schwierig zu wissen, welche zu welchem ​​Zweck verwendet werden sollen. Dies ist eine gute Frage, und die Antwort von glpretre war genau das, wonach ich auch gesucht habe.
Matt
5
Ich denke nicht, dass die Frage zu weit gefasst war (Winkelmesser gegen Karma). Es sind Frameworks, über die wir hier sprechen, nicht nur irgendeine Software, also ist die Frage an der richtigen Stelle.
CCC
Siehe meine Antwort hier für eine detailliertere Diskussion der Anwendungsfälle, Vorteile und Einschränkungen von Karma und Winkelmesser: stackoverflow.com/a/29619467/1614973
Dmitri Zaitsev
Meines Wissens nach erlaubt Protractor nicht, nur einen Teil Ihrer App zu testen, ohne dass der Rest vorhanden ist (z. B. Verspottung): Der Testcode wird nicht einmal im selben JS-Interpreter wie die Anwendung ausgeführt. Keine Dateisystemüberwachung für Quellcodeänderungen und automatisches erneutes Auslösen der betroffenen Tests. Karma bietet diese. Es sendet Testcode + App-Code in <script> s an den Browser, sodass sie im selben Interpreter ausgeführt werden, was eine Verspottung möglich ist, ist jedoch nicht für End-to-End-Tests mit nativen Ereignissen ausgelegt, als würde ein echter Benutzer handeln.
Robert4

Antworten:

179

Das AngularJS-Team empfiehlt die Verwendung von Winkelmesser, da es den Winkel-Szenario-Läufer ersetzen soll:

Angular Scenario Runner befindet sich im Wartungsmodus - Wenn Sie ein neues Angular-Projekt starten, sollten Sie Winkelmesser verwenden .

zitiert aus AngularJs Dokumentation .

Das Tutorial Angular-Phonecat wurde vor langer Zeit (hauptsächlich 2011) entwickelt und noch nicht aktualisiert, um einige neue Angular-Funktionen wie Protractor zu verwenden.

BEARBEITEN

In den Winkelmesser-Dokumenten - FAQ :

Warum sowohl Karma als auch Winkelmesser? Wann benutze ich welche?

Karma ist ein großartiges Werkzeug für Unit-Tests, und Winkelmesser sind für End-to-End- oder Integrationstests gedacht. Dies bedeutet, dass kleine Tests für die Logik Ihrer einzelnen Controller, Anweisungen und Dienste mit Karma ausgeführt werden sollten. Große Tests, bei denen eine Instanz Ihrer gesamten Anwendung ausgeführt wird, sollten mit Protractor ausgeführt werden. Der Winkelmesser soll Tests aus Sicht eines Benutzers ausführen. Wenn Ihr Test als Anweisung für einen Menschen, der mit Ihrer Anwendung interagiert, notiert werden kann, sollte es sich um einen End-to-End-Test handeln, der mit dem Winkelmesser geschrieben wurde.

Hier ist ein großartiger Blog-Beitrag mit weiteren Informationen.

glepretre
quelle
11
In den Karma-FAQ - karma-runner.github.io/0.10/intro/faq.html - Kann ich Karma verwenden, um End-to-End-Tests durchzuführen ? Karma wurde hauptsächlich für Tests auf niedriger Ebene (Einheit) entwickelt. Wenn es sich um eine AngularJS-App handelt, können Sie Karma mit dem Karma-ng-Szenario-Plugin verwenden. Wir empfehlen jedoch Protractor für Tests auf hoher Ebene.
Mrwaim
Wenn ich sowohl Unit-Tests als auch E2E-Tests durchführen möchte, muss ich die Karma-Umgebung für Unit-Tests und Winkelmesser für UI-Tests oder E2E-Tests konfigurieren.
Sunil Garg
2
@ SunilGarg Ja, Sie müssen, vielleicht könnte Ihnen unsere Starter-App-Struktur helfen: github.com/glepretre/angular-requirejs-ready (ignorieren Sie die erforderlichen JS-Details, wenn Sie sie nicht verwenden)
glepretre