Jak określić katalog testowy dla mokki?

219

Mochatest domyślnie próbuje znaleźć pliki testowe , jak określić inny katalog, np. server-test?

Freewind
źródło
Chociaż nie jest w 100% odpowiedzią na twoje pytanie, sprawdź jaketrent.com/post/run-single-mocha-test - Przyszedłem tutaj , aby sprawdzić, jak uruchomić określony zestaw testów, a to pokazuje, że możesz użyć .onlyi .skipzarządzać testami biegną. Ważne przy opracowywaniu określonej funkcji, gdy nie chcesz czekać przez cały zestaw testów na działanie.
Dave Sag

Odpowiedzi:

141

Edycja: ta opcja jest przestarzała: https://mochajs.org/#mochaopts


Jeśli chcesz to zrobić, nadal działając mochaw wierszu polecenia, ale ./server-testszamiast tego chcesz uruchomić testy w folderze ./test, utwórz plik ./test/mocha.optsz 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/

Jeff Dickey
źródło
12
Jest to opcja z najmniejszym tarciem i powinna być zaakceptowaną odpowiedzią IMHO
Nick Tomlin
używam jednej z płyt kotła i to w następnym wierszu, może być z powodu okien, czy możesz to sprawdzić raz. węzeł ./node_modules/mocha/bin/mocha $ (znajdź api -name '* -test.js') --compilers js: babel-core / register
kobe
1
klejnot, również ładnie gra z konfiguracjami debugowania mokki Webstorm IDE, wystarczy wybrać „wzorce plików” i pozostawić puste dane wejściowe, a użyje mocha.opts
danday74
3
To z pewnością najlepsza odpowiedź. Najprawdopodobniej warto dodać w odpowiedzi również, że mocha.optsplik 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
quirimmo
1
możesz też po prostu wstawić --recursive w linii poleceń
mokki
282

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.

Behrang
źródło
1
To mi nie działa. Jeśli chcę to zrobić w ten sposób, muszę to zrobićmocha test/server-test
jonnie
22
Problem podwójnych cytatów miał mnie od wieków! Dziękuję za uratowanie mi zdrowia psychicznego. Krzyczcie wszystkim, którzy to czytają, aby zwrócić szczególną uwagę na te podwójne cytaty.
ctrlplusb
11
W moim przypadku korzystałem 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.
Stoutie,
1
lub po prostu użyj, --recursivejak wyjaśnię poniżej
Jeff Dickey
4
To powinna być odpowiedź! Podwójne cytaty ratują mnie
Minh Thai
81

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')
250R
źródło
29
lub po prostu użyj, --recursivejak wyjaśnię poniżej
Jeff Dickey
5
Innymi słowy, mochanie ma opcji ustawienia pożądanej struktury katalogów w config?
Zielony,
użytkownik klienta $ mocha $ (find testy -name '* .js') -bash: mocha: polecenie nie znaleziono; Otrzymuję ten błąd.
lft93ryt
1
To jest zbyt skomplikowane i mylące. Preferuj opcje mokki zamiast komendy OS.
Michael Bushe
twój post nie odpowiada na pytanie
ekkis
30

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ę .

Michael Bushe
źródło
To chyba najdokładniejszy sposób na zrobienie tego.
ArturS,
29

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
gregtczap
źródło
22

Jeśli w node.js , niektóre nowe konfiguracje od Mocha v6 :

Opcja 1: Utwórz .mocharc.jsonw katalogu głównym projektu:

{
  "spec": "path/to/test/files"
}

Opcja 2: dodaj mochawłaściwość do projektu package.json:

{
  ...

  "mocha": {
    "spec": "path/to/test/files"
  }
}

Więcej opcji jest tutaj .

temat
źródło
20

Uruchom wszystkie pliki w odpowiednich test_directorypodkatalogachtest.js

find ./parent_test_directory -name '*test.js' | xargs mocha -R spec

lub użyj --recursiveprzełącznika

mocha --recursive test_directory/
Anthony Awuley
źródło
11

Właśnie miałem ten problem i rozwiązałem go, usuwając --recursiveopcję (którą ustawiłem) i używając tej samej struktury sugerowanej powyżej:

mochify "test/unit/**/*.js"

To uruchomiło /test/unit/dla mnie wszystkie testy we wszystkich katalogach , ignorując inne katalogi/test/

jfunk
źródło
9

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

rajeshchauhan23102008
źródło
3

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.

Robin Luiten
źródło
11
Na dzień dzisiejszy można skorzystać z następującej --recursiveopcji:mocha --recursive "some_dir"
superjos,
3
Korzystanie 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ą)
Alex 75
3

Jeśli używasz nodejs, w swoim package.jsonunderscripts

  1. W przypadku global (-g)instalacji: "test": "mocha server-test"lub w "test": "mocha server-test/**/*.js"przypadku dokumentów podrzędnych
  2. W przypadku projectinstalacji: "test": "node_modules/mocha/bin/mocha server-test"lub w "test": "node_modules/mocha/bin/mocha server-test/**/*.js"przypadku dokumentów podrzędnych

Następnie po prostu uruchom swoje testy normalnie jako npm test

Cozzbie
źródło
Uważam, że npm run mocha "./test/*.spec.js!(~)"ignoruje argument glob, ale node_modules/.bin/mocha "./test/*.spec.js!(~)"nie robi tego.
ironchicken
@ironchicken, aby przekazać argumenty z „npm run”, użyj - jak wnpm run mocha -- yourArgs
Pedro A
3

Jak wspomniano w @superjos w komentarzach użyj

mocha --recursive "some_dir"

avck
źródło
2

To nie wydaje się być „łatwą” obsługą zmiany katalogu testowego.
Być może jednak powinieneś przyjrzeć się temu problemowi w odniesieniu do pytania.

Pierre
źródło
2

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

lwdthe1
źródło