Подтвердить что ты не робот

Мокко требует 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.
4b9b3361

Ответ 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 для более подробной информации.