Вопрос, на который вы ссылаетесь, не , особенно , полезен для вашего случая. Мой ответ там работает, потому что Mocha был разработан для передачи шаблонов, которые вы ему даете, в glob
библиотеку для интерпретации. Поэтому, когда вы делаете mocha 'src/app/**/*.tests.js'
, кавычки не позволяют оболочке интерпретировать шаблон, Mocha получает src/app/**/*.tests.js
в качестве первого заданного ему шаблона, который он дает glob
, чтобы получить список файлов для фактического запуска. Ваш случай отличается по крайней мере одним решающим способом: glob
не задействован, поэтому нет ничего, что может правильно интерпретировать **
Ваша первая попытка согласуется с тем, что происходит, когда вы используете оболочку, которая не понимает **
. Он интерпретируется точно так же, как *
. Таким образом, оболочка интерпретирует **/*.test.js
как */*.test.js
, расширяет этот шаблон и передает результат в node
.
Во второй попытке вы цитируете шаблон, но это не помогает, потому что node
не выполняет интерпретацию шаблона. Он пытается загрузить файл по пути src/**/*.test.js
, , интерпретируемому буквально . Это не то, что вы хотите.
Я не уверен, что означает совместимость с Windows, но вы могли бы заменить 'src/**/*.test.js'
на $(find src -type f -name '*.test.js')
. (Подробнее см. на странице man
.) Во время выполнения оболочка заменит это результатом команды find
.
Или для большей простоты и уменьшения риска возникновения проблем с платформой вы можете использовать babel-tap
, например:
babel-tap 'src/**/*.test.js' | tap-color
Если вы используете babel-tap
, на самом деле нет необходимости использовать find
, потому что внутренне babel-tap
вызывает средства, которые используют библиотеку glob
, для интерпретации переданных ей имен файлов.
Я сосредоточился на проблеме с шаблонами файлов, но не вижу, как будет работать то, что вы пытаетесь сделать, даже без проблем с шаблонами. Рассмотрим эту команду и предположим, что файлы существуют:
node -r @babel/register -r @babel/polyfill src/a.test.js src/b.test.js
Это не говорит Node о запуске src/a.test.js
и src/b.test.js
. Скорее, он сообщает узлу «запустить скрипт src/a.test.js
и передать ему параметр src/b.test.js
». Я не очень много использовал tap
, но не помню, чтобы он работал таким образом. Использование babel-tap
, как показано выше, также позволяет избежать этой проблемы.