Мокко требует творить.Не могу найти make.exe, который работает в Windows - PullRequest
13 голосов
/ 20 марта 2012

Mocha (тестовый фреймворк для Node.js) использует make.

Для себя я не могу найти совместимый make.exe для Windows.

Все отлично работает на моем Mac.

Я пытался использовать VSmama.exe и make.exe, которые я обнаружил, которые были перенесены из Unix.Но они все несовместимы.

Это не может быть только я

Вот make-файл:

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 работает со стандартными Make-файлами Mocha.

Ответы [ 4 ]

11 голосов
/ 20 марта 2012

Хех, я чувствую тебя;) Я являюсь частью команды, занятой созданием нового стартапа с использованием узла. Два наших разработчика работают на OSX, один на Linux. Я на Windows.

Я скачал и использую GNU "Make for Windows" и теперь вполне могу сделать наши комплекты установки и тестирования.

Кроме того, я настоятельно рекомендую вам использовать PowerShell - в нем есть набор команд, связанных с командами, удобными для UNIX (например, Get-ChildItem -> ls). Это позволяет нескольким нашим сценариям работать без изменений в UNIX или Windows.

Итак, к вашему вопросу:

Попробуйте заменить ваш make-файл выше следующим:

# 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

Примечание: в файлах Makefile задачи внутри целей должны иметь отступы от символов табуляции, а не пробелов! Пойди разберись !!

Я украл процедуру FixPath из этого поста (спасибо, Пол :)). Он заменяет строку / на \, если работает в Windows.

Одна из проблем с make в Windows заключается в том, что он выполняет оболочку для командной оболочки NT (через CreateProcess) для выполнения каждой задачи. Это означает, что любые N X-измы, которые иначе будет обрабатывать Powershell (например, ls, cat и т. Д.), Не будут работать при выполнении make-файлов. Таким образом, рекомендуется заменить встроенные команды на перезаписываемые псевдонимы, которые можно установить для одной команды для NT и другой для N X.

Возможно, я доберусь до разветвления Gnu Make и выясню, смогу ли я заставить его работать в Powershell при выполнении команд вместо командной строки NT. Это также устранит необходимость использования FixPath выше;)

Пинг мне, если вы застряли;)

5 голосов
/ 21 октября 2012

Вы можете использовать commander для реализации своей собственной версии в node.js!Я использую это для своих проектов, несмотря на то, что я на Mac.Он будет работать везде, где установлен узел.

Следующий скрипт предполагает, что ваши скрипты 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);
}
4 голосов
/ 19 марта 2014

Для тех, кто не хочет использовать make, вы также можете установить mocha глобально, чтобы он работал в обычной командной строке Windows:

npm install -g mocha

Затем запустите ваши тесты с mocha path\to\test.js

3 голосов
/ 31 августа 2012

Если вы используете make cygwin (cygwin / bin / make.exe), имейте в виду, что он ожидает разделителей табуляции в make-файлах.Если ваш редактор преобразует табуляцию в пробелы, вы в конечном итоге получите такие ошибки, как

makefile: 23: * отсутствует разделитель.Стоп.

Я читал, что упомянутый выше GNU Make для Windows подходит для пробелов и табуляции, но я еще не пробовал.

См. Как использовать Mocha для тестирования узлов в Windows для получения более подробной информации.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...