W moim pakiecie npm chciałbym emulować wzór Meteor następujący: plik źródłowy (o nazwie client.js
) ma plik testowy (o nazwie client.tests.js
) żyć w src/
teczka. Testy działają z npm test
dowództwo.
Podążam za dokumentami użytkowania do "t". Nie chcę używać a find
w moim poleceniu testu pakietu.
Rozumiem, że mocha może rekurencyjnie wykonywać testy:
mocha --recursive
Rozumiem, że mocha może wykonywać testy w określonym podfolderze przy użyciu
--recursive
flaga:mocha src --recursive
Rozumiem również, że mogę określić glob do filtrowania plików przez przekazanie
*.tests.js
:mocha * .tests.js
Ale chcę wszystkie trzy. Chcę, żeby mokka testowała tylko pliki kończące się tests.js
w folderze src, rekursywnie sprawdzając podkatalogi.
mocha --recursive *.tests.js
// See the files?
$ > ll ./src/app/
total 168
-rw-r--r-- ... client.js
-rw-r--r-- ... client.tests.js
// Option A
$ > mocha --recursive *.tests.js
Warning: Could not find any test files matching pattern: *.tests.js
No test files found
// Option B
$ > mocha *.tests.js --recursive
Warning: Could not find any test files matching pattern: *.tests.js
No test files found.
// Option C
$ > mocha --recursive src/app/*.tests.js
3 passing (130ms)
3 failing
Więc...
- Dlaczego mocha nie zbiera
*.tests.js
pliki w podfolderach? - Dlaczego działa, jeśli określę pełną ścieżkę do pliku?
- Jak sprawić, by działało zgodnie z oczekiwaniami?
Odpowiedzi:
26 dla odpowiedzi nr 1The --recursive
flaga ma działać w katalogach. Jeśli miałbyś przekazać glob, który pasuje do katalogów, to te katalogi byłyby sprawdzane rekursywnie, ale jeśli przekażesz glob, który pasuje do plików, tak jak robisz, wtedy --recursive
jest nieskuteczne. Proponuję nie używać --recursive
z globem, ponieważ globusy mają już możliwość przeglądania rekursywnie w podkatalogach. Mógłbyś:
mocha "src/app/**/*.tests.js"
To pasuje do wszystkich pasujących plików *.tests.js
rekursywnie w src/app
. Zwróć uwagę, jak używam pojedynczych cudzysłowów wokółwzór. To jest cytowanie wzorca tak, aby był przekazywany jako-jest do kodu globackiego Mocha, w przeciwnym razie twoja powłoka może to zinterpretować. Niektóre powłoki, w zależności od opcji, będą tłumaczyć **
w *
i nie uzyskasz pożądanych rezultatów.