Odpowiedzi:
Edycja: ta opcja jest przestarzała: https://mochajs.org/#mochaopts
Jeśli chcesz to zrobić, nadal działając mocha
w wierszu polecenia, ale ./server-tests
zamiast tego chcesz uruchomić testy w folderze ./test
, utwórz plik ./test/mocha.opts
z tym w pliku:
server-tests
Jeśli chcesz uruchomić wszystko w tym folderze i podkatalogach, włóż to do test/mocha.opts
server-tests
--recursive
mocha.opts
są argumentami przekazywanymi za pośrednictwem wiersza polecenia, więc utworzenie pierwszego wiersza tylko katalogu, w którym chcesz zmienić testy, spowoduje przekierowanie z ./test/
mocha.opts
plik można umieścić w dowolnym miejscu, a następnie po prostu wykonać mocha
ścieżkę do pliku konfiguracyjnego, na przykład:mocha --opts ./mocha.opts
Użyj tego:
mocha server-test
Lub jeśli masz podkatalogi użyj tego:
mocha "server-test/**/*.js"
Zwróć uwagę na użycie podwójnych cudzysłowów. Pominięcie ich może uniemożliwić uruchomienie testów w podkatalogach.
mocha test/server-test
mocha ./**/*.test.js
(więc mogę kolokować plik testowy z plikiem modułu). Wzorzec przestał działać, gdy dodałem plik testowy na innym poziomie w hierarchii plików niż reszta testów, i znalazłbym tylko ten jeden nieparzysty plik piłki, a nie tuzin innych, które żyły na tym samym poziomie w hierarchii . Naprawiono zawijanie w cudzysłów.
--recursive
jak wyjaśnię poniżej
Oto jeden ze sposobów, jeśli masz podfoldery w folderze testowym, np
/test
/test/server-test
/test/other-test
Następnie w systemie Linux możesz użyć polecenia find, aby wyświetlić rekursywnie wszystkie pliki * .js i przekazać je mokce:
mocha $(find test -name '*.js')
--recursive
jak wyjaśnię poniżej
mocha
nie ma opcji ustawienia pożądanej struktury katalogów w config?
Dobrym sposobem na to jest dodanie skryptu npm „testowego” w pakiecie.json, który wywołuje mocha z właściwymi argumentami. W ten sposób plik package.json opisuje również strukturę testową. Pozwala to również uniknąć wszystkich problemów międzyplatformowych w innych odpowiedziach (podwójne lub pojedyncze cudzysłowy, „znajdź” itp.)
Aby mocha uruchomił wszystkie pliki js w katalogu „test”:
"scripts": {
"start": "node ./bin/www", -- not required for tests, just here for context
"test": "mocha test/**/*.js"
},
Następnie, aby uruchomić tylko testy dymu, należy:
npm test
W ten sposób możesz ustandaryzować uruchamianie wszystkich testów we wszystkich projektach, więc gdy nowy programista rozpocznie projekt lub inny, będzie wiedział, że „test npm” uruchomi testy. Jest w tym dobry precedens historyczny (na przykład Maven, większość starych projektów „robienia” również). Z pewnością pomaga CI, gdy wszystkie projekty mają to samo polecenie testowe.
Podobnie możesz mieć podzbiór szybszych testów „zadymienia”, które możesz uruchomić w mokce:
"scripts": {
"test": "mocha test/**/*.js"
"smoketest": "mocha smoketest/**/*.js"
},
Następnie, aby uruchomić tylko testy dymu, należy:
npm smoketest
Innym częstym wzorcem jest umieszczanie testów w tym samym katalogu co testowane źródło, ale wywoływanie plików testowych * .spec.js. Na przykład: src / foo / foo.js jest testowany przez src / foo / foo.spec.js.
Aby uruchomić wszystkie testy o nazwie * .spec.js zgodnie z konwencją:
"scripts": {
"test": "mocha **/*.spec.js"
},
Następnie, aby uruchomić wszystkie testy:
npm test
Widzisz wzór tutaj? Dobry. :) Spójność pokonuje murę .
Nie używaj opcji -g lub --grep, ten wzorzec działa na nazwę testu wewnątrz niego (), a nie na system plików. Obecna dokumentacja wprowadza w błąd i / lub całkowicie błędnie. Aby ograniczyć całe polecenie do części systemu plików, możesz przekazać wzorzec jako ostatni argument (nie jest to flaga).
Na przykład to polecenie ustawia twój reporter na spec, ale testuje tylko pliki js bezpośrednio w katalogu testowym serwera:
mocha --reporter spec server-test/*.js
To polecenie zrobi to samo co powyżej, a ponadto uruchomi tylko przypadki testowe, w których ciąg / definicja testu it () zaczyna się od „Fnord:”:
mocha --reporter spec --grep "Fnord:" server-test/*.js
Uruchom wszystkie pliki w odpowiednich test_directory
podkatalogachtest.js
find ./parent_test_directory -name '*test.js' | xargs mocha -R spec
lub użyj --recursive
przełącznika
mocha --recursive test_directory/
Teraz dni (rok 2020) możesz sobie z tym poradzić używając pliku konfiguracyjnego mokka :
Krok 1: Utwórz plik .mocharc.js w katalogu głównym aplikacji
Krok 2: Dodaj poniższy kod w pliku konfiguracyjnym mokki:
'use strict';
module.exports = {
spec: 'src/app/**/*.test.js'
};
Aby uzyskać więcej opcji w pliku konfiguracyjnym, skorzystaj z tego linku: https://github.com/mochajs/mocha/blob/master/example/config/.mocharc.js
Korzystam z systemu Windows 7 przy użyciu node.js v0.10.0 i mocha v1.8.2 i npm v1.2.14. Właśnie próbowałem zmusić mokkę do skorzystania z testu ścieżki / jednostki, aby znaleźć moje testy. Po długim spędzeniu czasu i wypróbowaniu kilku rzeczy wylądowałem,
Użycie opcji „test / unit / *. Js” nie działa w systemie Windows. Z dobrych powodów, że powłoka systemu Windows nie rozwija symboli wieloznacznych, takich jak unixen.
Jednak użycie „test / unit” działa bez wzorca pliku. na przykład. „mocha test / unit” uruchamia wszystkie pliki znalezione w folderze test / unit.
To nadal uruchamia tylko jeden plik folderu jako test, ale można przekazać wiele nazw katalogów jako parametry.
Aby uruchomić pojedynczy plik testowy, możesz podać pełną ścieżkę i nazwę pliku. na przykład. „test mokka / jednostka / mytest1.js”
Właściwie instaluję w package.json dla npm „scripts”: {„test”: „mocha test / unit”},
Tak więc „npm test” uruchamia moje testy jednostkowe.
--recursive
opcji:mocha --recursive "some_dir"
node_modules\.bin\mocha "test\unit\*.js"
działa w systemie Windows. node_modules\.bin\mocha "**\*.js"
Działa również (moja prawdziwa sprawa). Ale szukam sposobu na wykluczenie katalogu node_modules . (Używam też gulpfile.js, ale czasami muszę uruchomić test bezpośrednio z mokką)
Jeśli używasz nodejs
, w swoim package.json
underscripts
global (-g)
instalacji: "test": "mocha server-test"
lub w "test": "mocha server-test/**/*.js"
przypadku dokumentów podrzędnychproject
instalacji: "test": "node_modules/mocha/bin/mocha server-test"
lub w "test": "node_modules/mocha/bin/mocha server-test/**/*.js"
przypadku dokumentów podrzędnychNastępnie po prostu uruchom swoje testy normalnie jako npm test
npm run mocha "./test/*.spec.js!(~)"
ignoruje argument glob, ale node_modules/.bin/mocha "./test/*.spec.js!(~)"
nie robi tego.
npm run mocha -- yourArgs
To nie wydaje się być „łatwą” obsługą zmiany katalogu testowego.
Być może jednak powinieneś przyjrzeć się temu problemowi w odniesieniu do pytania.
Jak sugerował @ jeff-dickey, w katalogu głównym projektu utwórz folder o nazwie test
. W tym folderze utwórz plik o nazwie mocha.opts
. Teraz, gdy staram się poprawić odpowiedź Jeffa, działało dla mnie zamiast podawać nazwę tylko jednego folderu testowego, podałem wzorzec, aby znaleźć wszystkie testy do uruchomienia w moim projekcie, dodając ten wiersz:
*/tests/*.js --recursive
w mocha.opts
Jeśli zamiast tego chcesz określić dokładne foldery, w których będą wyszukiwane testy, zrobiłem coś takiego:
shared/tests/*.js --recursive
server/tests/graph/*.js --recursive
Mam nadzieję, że pomoże to każdemu, kto potrzebował czegoś więcej niż te, które zapewniają inne odpowiedzi
.only
i.skip
zarządzać testami biegną. Ważne przy opracowywaniu określonej funkcji, gdy nie chcesz czekać przez cały zestaw testów na działanie.