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 bcd
który zawiera logs a
podcią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.only
nie będzie współpracować z given
od mocha-testdata . Łatwo jest zapomnieć o jego późniejszym usunięciu.
eslint-plugin-mocha
ma regułę, no-exclusive-tests
któ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 --grep
moż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, --bail
któ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 -- --bail
przydaje się zwolnienie za kaucją po pierwszym nieudanym teście
--grep
uratował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/mocha
cię 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.
-g
i 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-only
na serwerze CI / build. .only
ma 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.only
do 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”.
--grep
odfiltrowałem tylko z@
tagów.