445 Stimmen

Wie führt man einen einzelnen Test mit Mocha aus?

Ich benutze Mocha, um meine JavaScript-Sachen zu testen. Meine Testdatei enthält 5 Tests. Ist es möglich, einen bestimmten Test (oder eine Gruppe von Tests) auszuführen, anstatt alle Tests in der Datei?

503voto

Asherah Punkte 18163

Versuchen Sie, mochas --grep Option zu verwenden:

    -g, --grep             führt nur Tests aus, die mit  übereinstimmen

Sie können jedes gültige JavaScript-Regex als verwenden. Zum Beispiel, wenn wir test/mytest.js haben:

it('logs a', function(done) {
  console.log('a');
  done();
});

it('logs b', function(done) {
  console.log('b');
  done();
});

Dann:

$ mocha -g 'logs a'

Um einen einzelnen Test auszuführen. Beachten Sie, dass dies über die Namen aller describe(name, fn) und it(name, fn) Aufrufe greift.

Erwägen Sie die Verwendung von verschachtelten describe() Aufrufen für die Namensgebung, um es einfach zu machen, bestimmte Sets zu lokalisieren und auszuwählen.

6 Stimmen

Wenn Mocha programmatisch verwendet wird (beispielsweise von Grunt aus), gibt es einen Haken: Die grep-Option muss ein ´RegExp()´-Objekt sein. Wenn es ein String ist, wird er escapet.

1 Stimmen

Dies ist die einzige Lösung, die für mich funktioniert hat. Das Angeben von Dateien in der Befehlszeile (mocha some/test.js) hat überhaupt nicht funktioniert. Danke!

2 Stimmen

Gibt es einen Weg, um auch das Ausführen von logs a bcd zu vermeiden, das den Teilstring logs a enthält? Regexp ^$ funktioniert nicht in 0.10.2.

226voto

J Burnett Punkte 2260

Je nach Ihrem Verwendungsmuster möchten Sie möglicherweise nur verwenden. Wir verwenden den TDD-Stil; es sieht so aus:

test.only('Datumsteil des gültigen Partitionsschlüssels', function (done) {
    //...
}

Nur dieser Test wird aus allen Dateien/Suiten ausgeführt.

5 Stimmen

BDD funktioniert genauso. Dies ist großartig, wenn Sie an einem einzelnen Test arbeiten. Es kann auch auf der Suite/Beschreibungsebene verwendet werden.

31 Stimmen

Mit chai und expect Syntax wäre das it.only.

4 Stimmen

Diese Antwort ist besser, da sie auch funktioniert, wenn Mocha von innerhalb von Karma verwendet wird, etc.

125voto

Ashley Coolman Punkte 10209

Wenn Sie npm test verwenden (durch package.json scripts), setzen Sie ein zusätzliches -- ein, um den Parameter an Mocha weiterzuleiten

z.B. npm test -- --grep "mein zweiter Test"

BEARBEITEN: Sieht so aus, als ob --grep ein wenig pingelig sein kann (wahrscheinlich je nach den anderen Argumenten). Sie können:

Bearbeiten Sie die package.json:

"test:mocha": "mocha --grep \"\" .",

Oder verwenden Sie alternativ --bail, das weniger pingelig zu sein scheint

npm test -- --bail

2 Stimmen

@Andy --grep kann etwas pingelig sein - versuche es direkt nach mocha innerhalb des npm-Skripteintrags zu platzieren. Ansonsten ist npm test -- --bail nützlich, um nach dem ersten fehlgeschlagenen Test abzubrechen.

2 Stimmen

Das Einbringen zusätzlicher Bindestriche vor --grep hat mir den Tag gerettet! Vielen Dank. PS. Ich benutze Windows und führe npm test -- --grep @tag aus.

92voto

QauseenMZ Punkte 761

Verwenden Sie einfach .only vor 'describe', 'it' oder 'context'. Ich führe mit "$npm run test:unit" aus, und es führt nur Einheiten mit .only aus.

describe.only('Erfolg erhalten', Funktion() {
 // ...
});

it.only('sollte 1 zurückgeben', Funktion() {
  // ...
});

0 Stimmen

Dies ist die richtige Antwort

38voto

Frank Nocke Punkte 8618

Einen einzelnen Test ausführen – nach Dateiname –

Eigentlich kann man auch einen einzigen Mocha-Test nach Dateiname ausführen (nicht nur durch „it()-String-Grepping“), wenn man das Glob-Muster (z.B. ./test/**/*.spec.js) aus der mocha.opts entfernt bzw. eine Kopie erstellt ohne:

node_modules/.bin/mocha --opts test/mocha.single.opts test/self-test.spec.js

Hier ist meine mocha.single.opts (sie unterscheidet sich nur darin, dass die oben genannte Glob-Zeile fehlt)

--require ./test/common.js
--compilers js:babel-core/register
--reporter list
--recursive

Hintergrund: Obwohl man die verschiedenen Schalter aus der opts-Datei überschreiben kann (beginnend mit --), kann man das Glob nicht überschreiben. Der Link enthält auch einige Erklärungen.

Hinweis: Wenn node_modules/.bin/mocha Sie verwirrt, verwenden Sie das lokale Paket mocha. Sie können auch einfach mocha schreiben, wenn Sie es global installiert haben.


Und wenn Sie die Annehmlichkeiten von package.json möchten: Dennoch: Entfernen Sie das **/*-ähnliche Glob aus Ihrer mocha.opts, fügen Sie es hier ein, für das gesamte Testen, lassen Sie es für die Einzeltests weg:

"test": "mocha ./test/**/*.spec.js",
"test-watch": "mocha -R list -w ./test/**/*.spec.js",
"test-single": "mocha",
"test-single-watch": "mocha -R list -w",

Verwendung:

> npm run test

bzw.

> npm run test-single -- test/ES6.self-test.spec.js 

achten Sie auf das --, das alles nach ihm mit dem npm-Skript verknüpft.

0 Stimmen

$1 wurde in meinem Setup nicht benötigt, stattdessen führte es zu Warnungen wie: Warnung: Es konnten keine Testdateien gefunden werden, die dem Muster entsprechen: $1

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X