Führen Sie nur EINEN Test mit Jest durch

91

Ganz einfach, ich möchte nur einen Test mit Jest durchführen.

Ich habe it.onlyoder describe.onlyaber es laufen noch viele Tests. Ich denke, es werden alle Tests seit meinem letzten Commit ausgeführt, aber dieses Verhalten sollte nicht onlyexplizit gesetzt sein, oder?

Was verursacht dieses Verhalten und wie wird ein einzelner Test ausgeführt?

jpenna
quelle
1
Mögliches Duplikat von Wie führe ich einen einzelnen Test mit Jest durch?
YPCrumble
Wenn ich das "Duplikat-Flag" akzeptiere, wird "Ihre Frage als Duplikat markiert, wodurch zukünftige Leser zur ursprünglichen Frage geleitet werden und verhindert wird, dass hier weitere Antworten veröffentlicht werden." Ich denke nicht, dass sie genau gleich sind, da jede Frage und Antwort unterschiedliche Ansätze verfolgt.
Jpenna
@jpenna: schau dir nur die ursprüngliche Frage an. Die gleichen Antworten wurden gegeben.
Dan Dascalescu

Antworten:

108

Jest parallelisiert Testläufe und weiß nicht im Voraus, welche Tests ausgeführt werden sollen und welche nicht. Das heißt, wenn Sie "fit" verwenden, wird nur ein Test in dieser Datei ausgeführt, aber dennoch alle anderen Testdateien in Ihrem Projekt .

fit, fdescribeUnd it.only, describe.onlyhaben den gleichen Zweck, andere Tests überspringen, führen nur mich.

Quelle: https://github.com/facebook/jest/issues/698#issuecomment-177673281


Verwenden Sie den jestFiltermechanismus, wenn Sie Ihre Tests wie ausführen

jest --config=jest.config.json --watch

Sie können Tests nach einem testnameoder filtern, indem Sie filenameeinfach den Anweisungen im Terminal folgen

Geben Sie hier die Bildbeschreibung ein

Drücken Sie pund geben Sie einen Dateinamen ein

Geben Sie hier die Bildbeschreibung ein

Dann können Sie verwenden describe.onlyund it.onlyalle anderen Tests aus gefilterten, getesteten Dateien überspringen.

hinok
quelle
1
Ich mache diesen Filter nach Datei, aber es ist komisch ... Also .onlyfunktioniert das nur für die Tests derselben Datei?
Jpenna
2
Ich mag das noch mehr als die einzige Sache, da ich früher vergessen habe, nur im Quellcode rückgängig zu machen und das festzuschreiben.
Dziamid
3
Obwohl die Tests übersprungen werden, scheint der zu testende Code in jedem Beispiel ausgewertet zu werden. Gibt es wirklich nicht eine Möglichkeit, 2019 nur einen einzigen Test durchzuführen?
Adam
@adaam Ich bin mir nicht sicher, ob ich Ihre Frage richtig verstanden habe. Bitte korrigieren Sie mich, wenn ich falsch liege. Wenn sich Tests in separaten Dateien befinden, wird nur Code in einer bestimmten Datei ausgeführt, wenn Sie Muster verwenden, um Tests explizit auszuführen. Wenn Code für eine bestimmte Datei ausgeführt wird, wird der gesamte Code in dieser Datei analysiert. Selbst wenn Sie einen einzelnen Test verwenden it.onlyoder it.skipeinen Syntaxfehler enthalten, schlagen alle Tests fehl. Natürlich wird Code aus Dateien, die durch Muster ausgeschlossen sind, nicht ausgeführt. imgur.com/z9FlQEZ
hinok
@hinok Stecke ein console.log in deine Karussellkomponente und starte deinen Testläufer erneut. Für mich, selbst wenn ich if.onlyes console.logs von der Carousel-Komponente so oft verwende, wie es übersprungene / nicht übersprungene Tests für diese Komponente in Ihren Uhrenmustern gibt.
adaam
28

it.onlyund describe.onlyarbeiten nur für das Modul, in dem sie sich befinden. Wenn Sie Probleme beim Filtern von Tests in mehreren Dateien haben, können Sie jest -t name-of-specTests filtern, die mit dem Spezifikationsnamen übereinstimmen (Übereinstimmung mit dem Namen in Beschreibung oder Test).
Quelle: https://facebook.github.io/jest/docs/en/cli.html

Zum Beispiel konzentriere ich den Test, den ich gerade schreibe, so (mit dem Testskript im package.json):
npm test -- -t "test foo"

Rodgobbi
quelle
4
Dies führt immer noch jeden einzelnen Test in meinem Fall aus und ich habe keine Ahnung warum
Kenny
Die einzige Erklärung, die mir einfällt, ist, dass Sie ein Zeichenfolgenargument übergeben, das in jedem einzelnen Testnamen (oder describeTestblock) vorhanden ist. In diesem Fall sollten Sie sich auf den genauen Testnamen beschränken, auf den Sie sich konzentrieren möchten.
Rodgobbi
Diese Antwort scheint für eine andere Frage viel besser geeignet zu sein: stackoverflow.com/questions/42827054/…
千 木 郷
8

es ist so:

jest sometest.test.js -t "some expression to match a describe or a test"

Es werden alle Dateien mit dem Namen sometest.test.jsund der Übereinstimmung basierend auf der Option -t getestet. Wenn Sie nur eine bestimmte Datei testen möchten, können Sie dies tun:

jest src/user/.../sometest.test.js
Hossein Alipour
quelle
8

Bei mir funktioniert es, wenn ich 2 Parameter wie diesen verwende:

yarn test --watch -f "src/...fullpath.../reducer.spec.js" -t "Name of the test"

Flaggen:

--watch: is optional

-f: will do filtering of your files, so if you have a lot of tests with the same name, specify the full path to the exact file

-t: works with 'describe' name or 'it' name of your test
tonco
quelle