JavaScript-решение без использования каких-либо внешних библиотек:
var now = new Date()
months = ['Jan','Feb','Mar','Apr','May','Jun','Jul','Aug','Sep','Oct','Nov','Dec']
var formattedDate = now.getDate()+"-"+months[now.getMonth()]+"-"+now.getFullYear()
alert(formattedDate)
Измените свои сценарии так, чтобы то, что вы передали в Mocha, было защищено от расширения оболочкой:
"scripts": {
"test": "mocha 'dist/**/*Test.js'",
}
Обратите внимание на одинарные кавычки вокруг параметра, указанного в mocha
.
Эта проблема исправлена без использования внешних инструментов. Основной причиной вашей проблемы является то, что в npm
используется sh
как оболочка, которая будет запускать ваши команды сценария.
В подавляющем большинстве случаев, когда процесс * nix запускает оболочку, он запустит sh
, если только что-то не говорит об этом иначе. Предпочтение оболочки, которое вы устанавливаете для входа в систему, не является способом «сказать об этом иначе». Поэтому, если у вас есть, скажем, zsh
в качестве вашей оболочки входа, это не означает, что npm
будет использовать zsh
.
Те реализации sh
, которые не содержат никаких расширений, кроме того, что sh
должен предоставить, не понимайте **
glob так, как вы этого хотите. Насколько я могу судить, это интерпретируется как *
. Тем не менее, Mocha интерпретирует пути, переданные ему, используя реализацию JavaScript globs. Таким образом, вы можете обойти проблему, защищая ваши глобы от интерпретации sh
. Рассмотрим следующий package.json
:
{
"name": "immutable-ts",
"scripts": {
"bad": "mocha test/**/*a.js",
"good": "mocha 'test/**/*a.js'",
"shell": "echo $0"
}
}
Скрипт shell
- это просто, чтобы мы могли проверить, в какой оболочке работает скрипт. Если вы запустите его, вы увидите sh
.
Теперь, учитывая следующее дерево:
test/
├── a.js
├── b.js
├── x
│ ├── a
│ │ ├── a.js
│ │ └── b.js
│ ├── a.js
│ └── b
│ └── a.js
└── y
├── a.js
└── q
При всех файлах a.js
и b.js
, содержащих it(__filename);
, Вы получаете следующие результаты:
$ npm run bad
> immutable-ts@ bad /tmp/t2
> mocha test/**/*a.js
- /tmp/t2/test/x/a.js
- /tmp/t2/test/y/a.js
0 passing (6ms)
2 pending
$ npm run good
> immutable-ts@ good /tmp/t2
> mocha 'test/**/*a.js'
- /tmp/t2/test/a.js
- /tmp/t2/test/x/a.js
- /tmp/t2/test/x/a/a.js
- /tmp/t2/test/x/b/a.js
- /tmp/t2/test/y/a.js
0 passing (5ms)
5 pending
Расширение glob действительно выполняется вашей оболочкой, и именно поэтому оно работает из командной строки.
Вы можете сделать mocha --recursive
и указать в тестовый каталог.
Вы можете встроить команду find
с параметром -name
в своих сценариях, чтобы заменить расширенный синтаксис globbing, предоставленный zsh.
В вашем случае команда будет:
mocha `find dist -type f -name '*Test.js'`
Вы можете реально опустить часть -type f
, если уверены, что никогда не станете «Test.js» в имени каталога. (Безопасное предположение, скорее всего, но я включил его для полноты)