Ich habe Angular2-Projekt mit Angular-CLI (Beta 20) erstellt.
Gibt es eine Möglichkeit, Tests nur für eine ausgewählte Spezifikationsdatei auszuführen?
Früher hatte ich ein Projekt, das auf Angular2-Schnellstart basierte, und ich konnte der Jasmin-Datei manuell Spezifikationen hinzufügen. Aber ich weiß nicht, wie ich dies außerhalb von Karma-Tests einrichten oder wie ich Karma-Tests auf bestimmte Dateien mit Angular-CLI-Builds beschränken kann.
quelle
fdescribe
oderxdescribe
? Ich möchte nicht, dass ein schlampiger Prüfer (ich) eine PR zusammenführt, die alle meine Tests überspringt.test.ts
Datei imsrc
Ordner konfigurieren :Ersetzen Sie
/\.spec\.ts$/
durch den Dateinamen, den Sie testen möchten. Beispielsweise:/app.component\.spec\.ts$/
Dies führt den Test nur für aus
app.component.spec.ts
.quelle
Sie können nur bestimmte Dateien mit der Angular CLI (dem
ng
Befehl) wie folgt testen :Weitere Dokumente finden Sie unter https://angular.io/cli/test
Beachten Sie, dass dies zwar für eigenständige Bibliotheksdateien funktioniert, jedoch nicht für eckige Komponenten / Dienste / etc. Dies liegt daran, dass
src/test.ts
Angular- Dateien Abhängigkeiten von anderen Dateien aufweisen (nämlich in Angular 7). Leider nimmt die--main
Flagge nicht mehrere Argumente an.quelle
component.spec.ts
dass die Tests niemals beginnen , wenn wir versuchen, sie auf eine automatisch generierte Datei zu verweisen :Error: AsyncTestZoneSpec is needed for the async() test helper but could not be found. Please make sure that your environment includes zone.js/dist/async-test.js
... Ich bin sicher, dass weitere Problemumgehungen gemeinsam gehackt werden können, aber es ist etwas, das Sie beachten solltensrc/main.ts
Dies liegt daran, dass das Setup und die Importe in diesem Fall nicht verfügbar sind.ng t
der Test, den ich schreibe, die Prüfung, aber wenn ich die spezifische Datei ausführe, wird ein Fehler ausgegeben. TypeError: Die Eigenschaft 'getComponentFromError' von null kann bei TestBedViewEngine._initIfNeeded (node_modules/@angular/core/fesm2015/testing.js: 3112: 1) unter TestBedViewEngine.get (node_modules/@angular/core/fesm20/) nicht gelesen werden. 3230: 1) unter Function.get (node_modules/@angular/core/fesm2015/testing.js: 2960: 1) unter UserContext. <Anonym> (src / app / timebar.service.spec.ts: 14: 45) "Wenn Sie steuern möchten, welche Dateien über die Befehlszeile ausgewählt werden, habe ich dies für Angular 7 geschafft.
Zusammenfassend müssen Sie
@angular-devkit/build-angular:browser
ein benutzerdefiniertes Webpack-Plugin installieren und anschließend erstellen, um die Regex der Testdatei weiterzuleiten. Beispielsweise:angle.json - Ändern Sie den Test Builder von
@angular-devkit/build-angular:browser
und legen Sie eine benutzerdefinierte Konfigurationsdatei fest:extra-webpack.config.js - Erstellen Sie eine Webpack-Konfiguration, die den regulären Ausdruck über die Befehlszeile liest:
test.ts - Bearbeiten Sie die Spezifikation
Verwenden Sie dann Folgendes, um die Standardeinstellung zu überschreiben:
Ich habe die Hintergrundgeschichte hier dokumentiert und mich im Voraus für Typen und falsche Links entschuldigt. Dank an die Antwort von @ Aish-Anu, die mich in die richtige Richtung gelenkt hat.
quelle
Dies funktioniert für mich in Angular 7. Es basiert auf der Option --main des Befehls ng. Ich bin nicht sicher, ob diese Option nicht dokumentiert ist und möglicherweise geändert werden kann, aber sie funktioniert für mich. Ich habe eine Zeile in meine package.json-Datei im Skriptabschnitt eingefügt. Dort gebe ich mit der Option --main mit dem Befehl ng test den Pfad zur Datei .spec.ts an, die ich ausführen möchte. Beispielsweise
Sie können das Skript ausführen, während Sie ein solches Skript ausführen. Ich starte es in Webstorm, indem ich im Abschnitt "npm" auf "Test 1" klicke.
quelle
Ich habe dieses Problem mit Grunzen für mich gelöst. Ich habe das Grunzskript unten. Das Skript verwendet den Befehlszeilenparameter des jeweiligen Tests, erstellt eine Kopie von test.ts und fügt diesen spezifischen Testnamen dort ein.
Um dies auszuführen, installieren Sie zuerst grunt-cli mit:
Fügen Sie die folgenden Grunzabhängigkeiten in Ihre package.json ein:
Um es auszuführen, speichern Sie die folgende Grunt-Datei als Gruntfile.js in Ihrem Stammordner. Führen Sie es dann über die Befehlszeile aus als:
Dadurch wird app.component.spec.ts ausgeführt.
Die Grunzdatei ist wie folgt:
quelle
Hinzu kommt, dass Leute wie ich nach einer Möglichkeit gesucht haben, eine einzelne Spezifikation in Angular auszuführen, und diese SO gefunden haben.
Gemäß den neuesten Angular-Dokumenten (Version 9.0.6 zum Zeitpunkt des Schreibens) verfügt der
ng test
Befehl über eine--include
Option, mit der Sie ein Verzeichnis von*.spec.(ts|tsx)
Dateien oder nur eine einzelne.spec.(ts|tsx)
Datei selbst angeben können .https://angular.io/cli/test
quelle
Nur eine kleine Änderung in der
test.ts
Datei im src-Ordner erforderlich :Hier,
test-example
ist der genaue Dateiname, den wir ausführen müssenWenn Sie nur die Servicedatei testen müssen, können Sie den Dateinamen wie "/test-example.service" ersetzen.
quelle