Używam Mocha do testowania moich skryptów JavaScript. Mój plik testowy zawiera 5 testów. Czy jest możliwe uruchomienie określonego testu (lub zestawu testów) zamiast wszystkich testów w pliku?
Używam Mocha do testowania moich skryptów JavaScript. Mój plik testowy zawiera 5 testów. Czy jest możliwe uruchomienie określonego testu (lub zestawu testów) zamiast wszystkich testów w pliku?
Odpowiedzi:
Spróbuj użyć opcji mokki--grep :
-g, --grep <pattern> only run tests matching <pattern>
Możesz użyć dowolnego poprawnego wyrażenia regularnego JavaScript jako <pattern>. Na przykład, jeśli mamy test/mytest.js:
it('logs a', function(done) {
console.log('a');
done();
});
it('logs b', function(done) {
console.log('b');
done();
});
Następnie:
$ mocha -g 'logs a'
Aby uruchomić pojedynczy test. Zauważ, że to przechwytuje nazwy wszystkich describe(name, fn)i it(name, fn)wywołań.
Rozważ użycie zagnieżdżonych describe()wywołań przestrzeni nazw, aby ułatwić zlokalizowanie i wybranie określonych zestawów.
mocha some/test.js) w ogóle nie działało. dzięki!
logs a bcdktóry zawiera logs apodciąg? Regexp ^$nie działa w wersji 0.10.2.
W zależności od wzorca użytkowania, możesz po prostu chcieć używać tylko . Używamy stylu TDD; To wygląda tak:
test.only('Date part of valid Partition Key', function (done) {
//...
}
Tylko ten test zostanie uruchomiony ze wszystkich plików / pakietów.
it.only.
it.onlynie będzie współpracować z givenod mocha-testdata . Łatwo jest zapomnieć o jego późniejszym usunięciu.
eslint-plugin-mochama regułę, no-exclusive-testsktóra złapie cię, jeśli zapomnisz usunąć .only.
Jeśli używasz npm test(używając skryptów package.json), użyj dodatkowego, --aby przekazać parametr do mokki
na przykład npm test -- --grep "my second test"
EDYCJA : Wygląda na to, że --grepmoże być trochę wybredna (prawdopodobnie w zależności od innych argumentów). Możesz:
Zmodyfikuj plik package.json:
"test:mocha": "mocha --grep \"<DealsList />\" .",
Lub alternatywnie użycie, --bailktóre wydaje się mniej wybredne
npm test -- --bail
--grep może być trochę wybredny - spróbuj umieścić go zaraz po mokce we wpisie skryptu npm. W przeciwnym razie npm test -- --bailprzydaje się zwolnienie za kaucją po pierwszym nieudanym teście
--grepuratowałem mój dzień! Wielkie dzięki. PS. Korzystam z systemu Windows, działamnpm test -- --grep @tag
W rzeczywistości można również uruchomić pojedynczy test mokki według nazwy pliku (nie tylko „it () - string-grepping”), jeśli usuniesz wzór globu (np. ./test/**/*.spec.js) Z pliku mocha.opts, odpowiednio utworzysz kopię bez:
node_modules/.bin/mocha --opts test/mocha.single.opts test/self-test.spec.js
Oto moja mocha.single.opts (różni się tylko brakiem wspomnianej linii glob)
--require ./test/common.js
--compilers js:babel-core/register
--reporter list
--recursive
Tło: Chociaż możesz przesłonić różne przełączniki z pliku opts (zaczynając od --), nie możesz przesłonić globu . Ten link zawiera również wyjaśnienia.
Wskazówka: jeśli node_modules/.bin/mochacię myli, skorzystaj z lokalnego pakietu mokka. Możesz także napisać tylko mocha, jeśli masz zainstalowany globalnie.
A jeśli chcesz wygody package.json: Ciągle: usuń **/*-ish glob z twojego mocha.opts, włóż je tutaj, na wszystkie testy, zostaw je dla pojedynczego testu:
"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",
stosowanie:
> npm run test
odpowiednio
> npm run test-single -- test/ES6.self-test.spec.js
(uwaga --!)
Warning: Could not find any test files matching pattern: $1
Cześć powyższe rozwiązania nie działały dla mnie. Innym sposobem przeprowadzenia pojedynczego testu jest
mocha test/cartcheckout/checkout.js -g 'Test Name Goes here'
Pomaga to uruchomić przypadek testowy z jednego pliku o określonej nazwie.
-gi nie będziesz musiał określać nazwy pliku. Jeśli nie możesz napisać wyrażenia, które jest wystarczająco selektywne, oznacza to, że nie nazywasz poprawnie swoich testów.
npm test <filepath>
np .:
npm test test/api/controllers/test.js
tutaj 'test / api / controllers / test.js' jest ścieżką do pliku.
Możesz spróbować „it.only”
it.only('Test one ', () => {
expect(x).to.equal(y);
});
it('Test two ', () => {
expect(x).to.equal(y);
});
w tym wykona się tylko pierwszy
--forbid-onlyna serwerze CI / build. .onlyma tendencję do zakradania się do głównej gałęzi i wyciszania innych testów, ponieważ po prostu nie będą się już uruchamiać. Zacząłem myśleć o przepływie pracy zmieniającym się kodzie, aby uruchamiać różne testy antyfunkcyjne. Testujący powinien określić, które testy należy wykonać (testy oznaczone tagami), a nie programistę.
it.onlydo repo
Patrząc na https://mochajs.org/#usage widzimy, że wystarczy użyć
test mokka / mój plik
będzie działać. Na końcu możesz pominąć „.js”.
--grepodfiltrowałem tylko z@tagów.