Ich benutze Mocha, um meine JavaScript-Inhalte zu testen. Meine Testdatei enthält 5 Tests. Ist es möglich, einen bestimmten Test (oder eine Reihe von Tests) anstelle aller Tests in der Datei auszuführen?
Ich benutze Mocha, um meine JavaScript-Inhalte zu testen. Meine Testdatei enthält 5 Tests. Ist es möglich, einen bestimmten Test (oder eine Reihe von Tests) anstelle aller Tests in der Datei auszuführen?
Antworten:
Versuchen Sie es mit der --grep
Option von Mokka :
-g, --grep <pattern> only run tests matching <pattern>
Sie können jeden gültigen JavaScript-Regex als verwenden <pattern>
. Zum Beispiel, wenn wir haben test/mytest.js
:
it('logs a', function(done) {
console.log('a');
done();
});
it('logs b', function(done) {
console.log('b');
done();
});
Dann:
$ mocha -g 'logs a'
So führen Sie einen einzelnen Test durch Beachten Sie, dass dies die Namen aller describe(name, fn)
und Aufrufe erfasst it(name, fn)
.
Erwägen Sie die Verwendung verschachtelter describe()
Aufrufe für den Namespace, um das Auffinden und Auswählen bestimmter Gruppen zu vereinfachen.
mocha some/test.js
) funktionierte überhaupt nicht. Vielen Dank!
logs a bcd
die den logs a
Teilstring enthält ? Regexp ^$
funktioniert nicht mit 0.10.2.
Je nach Ihrem Nutzungsmuster, können Sie nur nutzen möchten nur . Wir verwenden den TDD-Stil; es sieht aus wie das:
test.only('Date part of valid Partition Key', function (done) {
//...
}
Nur dieser Test wird von allen Dateien / Suites ausgeführt.
it.only
.
it.only
funktioniert nicht zusammen mit given
den Mokka-Testdaten . Und es ist leicht zu vergessen, es später zu entfernen.
eslint-plugin-mocha
hat eine Regel, no-exclusive-tests
die Sie fängt, wenn Sie vergessen, zu entfernen .only
.
Wenn Sie npm test
(mit package.json-Skripten) verwenden, verwenden Sie ein Extra --
, um den Parameter an mocha weiterzuleiten
z.B npm test -- --grep "my second test"
EDIT : Sieht aus wie --grep
kann ein wenig pingelig sein (wahrscheinlich abhängig von den anderen Argumenten). Sie können:
Ändern Sie die package.json:
"test:mocha": "mocha --grep \"<DealsList />\" .",
Oder alternativ verwenden, --bail
was weniger pingelig zu sein scheint
npm test -- --bail
--grep
kann etwas pingelig sein - versuchen Sie es direkt nach Mokka im npm- Skripteintrag . Andernfalls npm test -- --bail
ist es nützlich, nach dem ersten fehlgeschlagenen Test
--grep
mein Tag gerettet wurde! Vielen Dank. PS. Ich bin unter Windows und laufenpm test -- --grep @tag
Tatsächlich kann man auch einen einzelnen Mokka-Test nach Dateinamen ausführen (nicht nur nach „it () - String-Grepping“), wenn Sie das Glob-Muster (z. B. ./test/**/*.spec.js
) aus Ihren mocha.opts entfernen bzw. eine Kopie erstellen, ohne:
node_modules/.bin/mocha --opts test/mocha.single.opts test/self-test.spec.js
Hier ist meine mocha.single.opts (es ist nur anders, wenn die oben genannte Glob-Linie fehlt)
--require ./test/common.js
--compilers js:babel-core/register
--reporter list
--recursive
Hintergrund: Während Sie die verschiedenen Schalter aus der opts-Datei (beginnend mit --
) überschreiben können , können Sie den Glob nicht überschreiben . Dieser Link enthält auch einige Erklärungen.
Hinweis: Wenn node_modules/.bin/mocha
Sie verwirrt sind, verwenden Sie das lokale Paket Mokka. Sie können auch nur schreiben mocha
, wenn Sie es global installiert haben.
Und wenn Sie den Komfort von package.json
: Trotzdem: Entfernen Sie den **/*
-ish Glob von Ihrem mocha.opts
, fügen Sie sie hier ein, für alle Tests, lassen Sie sie für die einzelnen Tests weg:
"test": "mocha ./test/**/*.spec.js",
"test-watch": "mocha -R list -w ./test/**/*.spec.js",
"test-single": "mocha $1",
"test-single-watch": "mocha -R list -w $1",
Verwendung:
> npm run test
beziehungsweise
> npm run test-single -- test/ES6.self-test.spec.js
(Beachten Sie die --
!)
Warning: Could not find any test files matching pattern: $1
Hallo, obige Lösungen haben bei mir nicht funktioniert. Die andere Möglichkeit, einen einzelnen Test auszuführen, ist
mocha test/cartcheckout/checkout.js -g 'Test Name Goes here'
Dies hilft, einen Testfall aus einer einzelnen Datei mit einem bestimmten Namen auszuführen.
-g
und für den Sie keinen Dateinamen angeben müssen. Wenn Sie keinen Ausdruck schreiben können, der selektiv genug ist, bedeutet dies, dass Sie Ihre Tests nicht richtig benennen.
npm test <filepath>
z.B :
npm test test/api/controllers/test.js
Hier ist 'test / api / controller / test.js' der Dateipfad.
Sie können "it.only" versuchen
it.only('Test one ', () => {
expect(x).to.equal(y);
});
it('Test two ', () => {
expect(x).to.equal(y);
});
In diesem Fall wird nur der erste ausgeführt
--forbid-only
den CI / Build-Server ausgeführt werden. .only
hat die Tendenz, sich in den Hauptzweig zu schleichen und die anderen Tests stumm zu schalten, da sie einfach nicht mehr ausgeführt werden. Ich dachte an den Workflow, Code zu ändern, um verschiedene Tests als Anti-Feature auszuführen. Der Testläufer sollte bestimmen, welche Tests ausgeführt werden sollen (auch als getaggte Tests bezeichnet), nicht der Entwickler.
it.only
Wenn wir in https://mochajs.org/#usage schauen, sehen wir, dass einfach verwenden
Mokka-Test / Myfile
wird funktionieren. Sie können die '.js' am Ende weglassen.
--grep
nur aus den@
Tags gefiltert .