Mocha(Node.js的测试框架)使用make。
对于我的生活,我找不到兼容的make.exe for Windows。
我的Mac上一切正常。
我尝试过使用VS的nmake.exe和我发现的从Unix移植的make.exe。但它们都是不相容的。
它不仅仅是我
这是makefile:
test:
@./node_modules/.bin/mocha -u tdd -R spec
.PHONY: test
制作barf。在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)
Set-Alias make "c:\dev\utils\cygwin\bin\make.exe"
,现在make test
适用于标准的Mocha Makefile。答案 0 :(得分:11)
嘿,我觉得你;)我是一个忙着用节点建立新创业公司的团队的一员。我们的两个开发人员在OSX上,一个在Linux上。我在Windows上。
我下载并使用GNU's "Make for Windows",现在可以非常高兴地安装和安装测试套件。
另外,我强烈建议您使用PowerShell - 它有一堆别名的命令(例如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
注意:使用Makefile时,目标中的任务必须使用制表符而不是空格缩进!去图!!
我从this post偷走了FixPath例程(感谢Paul :))。如果在Windows上运行,它将替换字符串'/ with。
Windows上make的一个问题是它会弹出NT的命令shell(通过CreateProcess)来执行每个任务。这意味着,执行makefile时,Powershell将处理的任何 N X-isms(例如ls,cat等)都不起作用。因此,建议用可覆盖的别名替换内联命令,您可以将其设置为NT的一个命令,而 N X的另一个命令。
也许我会绕过分支Gnu Make,看看我是否可以在执行命令而不是NT命令行时将其发送到Powershell。这也将消除上面对FixPaths的需求;)
如果你遇到困扰,请告诉我;)
答案 1 :(得分:5)
您可以使用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);
}
答案 2 :(得分:4)
对于那些不想使用make的用户,您还可以全局安装mocha
,以便它可以在常规Windows命令行中运行:
npm install -g mocha
然后使用mocha path\to\test.js
答案 3 :(得分:3)
如果您正在使用cygwin的make(cygwin / bin / make.exe),请注意它需要makefile中的制表符分隔符。如果你的编辑器将标签转换为空格,你最终会得到像
这样的错误makefile:23: * 缺少分隔符。停止。
我已经读过上面提到的GNU的Make for Windows,可以使用空格或制表符,但我还没有尝试过。
有关详细信息,请参阅How To Use Mocha for Node Testing in Windows。