/ / W jaki sposób mocha może rekurencyjnie przeszukiwać mój folder `src` dla określonego wzorca nazwy pliku? - javascript, node.js, npm, mocha

W jaki sposób mocha może rekurencyjnie przeszukiwać mój folder `src` dla określonego wzorca nazwy pliku? - javascript, node.js, npm, mocha

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.

  1. Rozumiem, że mocha może rekurencyjnie wykonywać testy:

    mocha --recursive

  2. Rozumiem, że mocha może wykonywać testy w określonym podfolderze przy użyciu --recursive flaga:

    mocha src --recursive

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

  1. Dlaczego mocha nie zbiera *.tests.js pliki w podfolderach?
  2. Dlaczego działa, jeśli określę pełną ścieżkę do pliku?
  3. Jak sprawić, by działało zgodnie z oczekiwaniami?

Odpowiedzi:

26 dla odpowiedzi nr 1

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