Ausführen einer einzelnen Testdatei


137

Gibt es eine Möglichkeit, ng testfür eine einzelne Datei anstatt für die gesamte Testsuite auszuführen ? Im Idealfall möchte ich beim Bearbeiten einer Datei eine möglichst schnelle Rückkopplungsschleife erhalten, karmaführt jedoch bei jedem Speichern die gesamte Suite aus. Dies ist etwas langsam, wenn Sie eine ausreichend große Testsuite erstellen.


Dies unterscheidet sich von der Ausführung nur einer Testspezifikation mit angle-cli darin, dass es bei dieser Frage um die Ausführung einer einzelnen Spezifikation geht. Hier geht es darum, eine einzelne Datei auszuführen. Die Lösung beinhaltet dasselbe Jasmine-Spezifikationsmerkmal, aber die Art der Frage unterscheidet sich geringfügig.




Antworten:


260

Ich habe festgestellt, dass Jasmine es Ihnen ermöglicht, ein (für den Fokus?) Präfix describeund itMethoden zu verwenden f. Also fdescribeund fit. Wenn Sie eine dieser Methoden verwenden, führt Karma nur die relevanten Tests durch. Um die aktuelle Datei zu fokussieren, können Sie einfach die oberste Ebene nehmen describeund in ändern fdescribe. Funktioniert für meine Zwecke.


9
legendäre Antwort
danday74

1
Ich kann nicht glauben, dass solch wichtige Funktionen nicht offensichtlicher und unkomplizierter sind.
Ash

10
Es funktioniert, ist aber nicht ideal, da Sie den Quellcode ändern müssen und am Ende den geänderten Code in der Quellcodeverwaltung einchecken können.
Marco Altieri

4
Bitte fügen Sie nach Möglichkeit Links zur offiziellen Dokumentation hinzu
jgpATs2w

Ich habe dies gesucht, Awesome
Carlos E

26

Es ist erwähnenswert, dass Sie einen bestimmten Test deaktivieren können, ohne durch xdescribeund zu kommentierenxit

xdescribe('Hello world', () => { 
  xit('says hello', () => { 
    expect(helloWorld())
        .toEqual('Hello world!');
  });
});

Und wie schon jemand gesagt hat, wenn Sie sich dann fdescribeund auf einen Test konzentrieren wollenfit

fdescribe('Hello world', () => { 
  fit('says hello', () => { 
    expect(helloWorld())
        .toEqual('Hello world!');
  });
});

25

Dies kann heutzutage über die includeOption erreicht werden. https://angular.io/cli/test#options

Es ist ein Glob-Match, also als Beispiel:

ng test --include='**/someFolder/*.spec.ts'

Ich kann es nicht in den Versionshinweisen zu 8.1.0 finden , aber @Swoox erwähnt, dass dies eine Funktion nach der CLI-Version ist 8.1.0. Danke, dass du das herausgefunden hast.


1
Dies scheint ein aktuelles Update zu sein. Vielleicht möchten Sie angeben, welche Version benötigt wird. CLI 8.1 wird benötigt.
Swoox

Scheint in
v9.1

2
Ich habe dies gerade in CLI v9.1.0 getestet und es funktioniert perfekt.
Sajjan Singh

8

Ich habe festgestellt, dass ng testes eine zusätzliche Option gibt, --includedie Sie verwenden können, um Tests für eine einzelne Datei, ein bestimmtes Verzeichnis oder eine Reihe von Dateien ausführen zu können:

// one file
npm run test -- --include src/app/components/component/component-name.component.spec.ts

// directory or bunch of files
npm run test -- --include src/app/components

ng cli docs


Winkel 9 - es scheint entfernt worden zu sein
rmcsharry

Nein, es ist immer noch in NG 9 verfügbar.
Tephyr

6

Sie können src/test.tsdie folgende Zeile aufrufen und ändern:

const context = require.context('./', true, /\.spec\.ts$/);

zu

const context = require.context('./', true, /**yourcomponent.component**\.spec\.ts$/);

Geben Sie hier die Bildbeschreibung ein


1
Genau genommen klingt dies nach der richtigsten Antwort, obwohl bei den meisten Fragen dazu das Problem mithilfe von fit und fdescribe gelöst wurde. Es gibt ein Git-Problem, um dies in Karma einfacher zu erreichen: github.com/karma-runner/karma/issues/1507 . Im Idealfall, wenn auch nicht einfach, können wir Karma so konfigurieren, dass wir Änderungen an einem Test vornehmen und dann einfach im Browser darauf klicken, um es mit dem Update erneut auszuführen.
Pumpkinthehead



0

Sie müssen gehen src/test.tsund können den folgenden Zeilennummerncode 18 ändern:

//Then we find all the tests.
const context = require.context('./', true, /\.spec\.ts$/);

zu

//Then we find all the tests.
const context = require.context('./', true, /testing.component\.spec\.ts$/);

Geben Sie hier die Bildbeschreibung ein


-3

Funktioniert, wenn Sie Ihre Spezifikationsdatei als Parameter angeben.

Beispielsweise:

ng test foo.spec.ts

Hoffe das hilft.


4
Können Sie angeben, welche Version Sie verwenden? Funktioniert nicht mit 1.7.x
FrEaKmAn

4
Es hat auch bei mir nicht so funktioniert wie es ist. Ich habe es jedoch so geändert, dass es mit der Option --main vor dem Pfad zur Spezifikationsdatei funktioniert. Ich habe einen absoluten Pfad mit Schrägstrichen verwendet. Habe noch keinen relativen Weg ausprobiert. Verwenden von Angular 6. Ich bin mir nicht sicher, ob es die beste Lösung ist, aber es scheint für mich zu funktionieren.
user2367418
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.