Мокко требует make. Не удается найти make.exe, который работает в Windows
Mocha (тестовая среда для Node.js) использует make.
В течение жизни я не могу найти совместимый make.exe для Windows.
Все работает отлично на моем Mac.
Я пробовал использовать VS nmake.exe и make.exe, который я нашел, который был портирован из Unix. Но все они несовместимы.
Это может быть не просто
Здесь makefile:
test:
@./node_modules/.bin/mocha -u tdd -R spec
.PHONY: test
сделать barfs на. в PHONY, и даже если я удалю его, он никогда не запускает команду mocha (или, по крайней мере, нет выхода).
Запуск ./node_modules/.bin/mocha -u -tdd -R spec
напрямую дает мне отчет о тестировании:
first suite -
? ten should always be equal to 9+1
? zero is less all positive numbers
? There is no i in team
? 3 tests complete (8ms)
РЕДАКТИРОВАТЬ 3/25/12
- В конце концов, самый простой способ справиться с этим - использовать Cygwin и обеспечить установку пакетов разработчика для Cygwin. В PowerShell я сделал
Set-Alias make "c:\dev\utils\cygwin\bin\make.exe"
, а теперь make test
работает с обычными файлами Mocha Makefiles.
Ответы
Ответ 1
Хех, я чувствую тебя;) Я часть команды, занятой созданием нового запуска с помощью node. Два из наших разработчиков работают на OSX, один - на Linux. Я нахожусь в Windows.
Я загрузил и использовал GNU "Make for Windows" и теперь вполне может сделать наши установки и тестовые пакеты.
Кроме того, я настоятельно рекомендую вам использовать PowerShell - он имеет кучу команд с псевдонимом UNIX-совместимых команд (например, Get-ChildItem → ls). Это позволяет нескольким нашим скриптам работать в UNIX или Windows без изменений.
Итак, к вашей проблеме:
Попробуйте заменить файл makefile выше:
# Detect if we're running Windows
ifdef SystemRoot
# If so, set the file & folder deletion commands:
FixPath = $(subst /,\,$1)
else
# Otherwise, assume we're running *N*X:
FixPath = $1
endif
NODE_MODULES := ./node_modules/.bin/
test:
$(call FixPath, NODE_MODULES)mocha -u tdd -R spec
.PHONY: test
Примечание: с помощью Make файлов задачи внутри целей должны быть отступом с символами табуляции, а не пробелами! Пойдите фигурой!!
Я украл процедуру FixPath из этого сообщения (спасибо Paul:)). Он заменяет строку/на\если выполняется в Windows.
Одной из проблем с make в Windows является то, что она запускает оболочку командной строки NT (через CreateProcess) для выполнения каждой задачи. Это означает, что любые NX-изомы, которые в противном случае обрабатывались Powershell (например, ls, cat и т.д.), Не будут работать при выполнении make файлов. Таким образом, рекомендуется заменить встроенные команды на переопределяемые псевдонимы, которые вы можете установить для одной команды для NT, а другая для NX.
Возможно, мне придется разобраться с Gnu Make и посмотреть, могу ли я заставить его работать с Powershell при выполнении команд вместо командной строки NT. Это также устранит необходимость в FixPaths выше;)
Пинг меня, если ты застрял;)
Ответ 2
Вы можете использовать commander, чтобы реализовать свою собственную версию в node.js! Я использую это для своих проектов, несмотря на то, что я нахожусь на mac. Он будет работать в любом месте, где установлен node.
Следующий script предполагает, что ваши скрипты cli находятся в /path/to/your/app/cli
.
node cli/test.js -u # runs unit tests in /path/to/your/app/tests/unit
node cli/test.js -f # runs functional tests in /path/to/your/app/tests/functional
test.js
/*
* CLI for execution of the mocha test suite.
*
* test.js --help for instructions.
*/
var program = require('commander');
program
.version('1.0.0')
.option('-u, --unit', 'Run unit tests.')
.option('-f, --functional', 'Run functional tests.')
.on('--help', function(){
console.log('Executes the mocha testsuite.');
console.log('');
})
.parse(process.argv)
;
if(!program.unit && !program.functional) {
console.log();
console.log('Specify if you want to run unit tests (-u) or functional tests (-f).');
console.log('Run help (-h) for detailed instructions.');
console.log();
}
if(program.unit) {
require('child_process').exec(__dirname + '/../node_modules/.bin/mocha -u tdd -R spec --recursive -c ' + __dirname + '/../tests/unit', standardOutput);
}
if(program.functional) {
require('child_process').exec(__dirname + '/../node_modules/.bin/mocha -u bdd -R spec --recursive -c ' + __dirname + '/../tests/functional', standardOutput);
}
/**
* Standard output.
*
* @method standardOutput
* @param {Object} error
* @param {String} stdout the cli standard output
* @param {String} stderr output of errors
*/
function standardOutput(error, stdout, stderr) {
console.log(stdout);
console.log(stderr);
}
Ответ 3
Для тех, кто не хочет использовать make, вы также можете установить mocha
глобально, чтобы он работал в обычной командной строке Windows:
npm install -g mocha
Затем запустите свои тесты с помощью mocha path\to\test.js
Ответ 4
Если вы используете cygwin make (cygwin/bin/make.exe), имейте в виду, что он ожидает разделителей вкладок в make файлах. Если ваш редактор преобразует вкладки в пробелы, вы получите ошибки, например
makefile: 23: * отсутствует разделитель. Стоп.
Я читал, что GNU Make для Windows, упомянутый выше, в порядке с пробелами или вкладками, но я еще не пробовал.
См. Как использовать Mocha для Node Тестирование в Windows для более подробной информации.