Node.js 如何访问摩卡&x27;脚本中的json报告?
Mocha可以是,它有一个有用的,但是如何从调用脚本访问报告的结构呢?重定向标准输出已工作:Node.js 如何访问摩卡&x27;脚本中的json报告?,node.js,mocha.js,Node.js,Mocha.js,Mocha可以是,它有一个有用的,但是如何从调用脚本访问报告的结构呢?重定向标准输出已工作: var Mocha=require('Mocha'); var stats={}; var oldswrite=process.stdout.write; process.stdout.write=函数(txt){ stats=JSON.parse(txt).stats;//一口气调用write。 }; 新摩卡咖啡()。 addFile(“test/toyTest”)。 报告器(“json”{stats
var Mocha=require('Mocha');
var stats={};
var oldswrite=process.stdout.write;
process.stdout.write=函数(txt){
stats=JSON.parse(txt).stats;//一口气调用write。
};
新摩卡咖啡()。
addFile(“test/toyTest”)。
报告器(“json”{stats:stats})。
运行(功能(故障){
process.on('exit',function(){
process.stdout.write=oldswrite;
log(“百分比:”+stats.passes/(stats.passes+stats.failures));
进程退出(失败>0?1:0);
});
});
但我本来希望有一个更直接的解决方案。根据,答案是“你不能”:
process.stdout.write(JSON.stringify(obj,null,2))代码>
由于上面的“我的解决方案”不太明显,我创建了一个添加报告器选项以传入目标对象:
var Mocha=require('Mocha');
var报告={};
新摩卡咖啡()。
addFile(“test/toyTest”)。
reporter(“json”,{“输出对象”:report})。
运行(功能(故障){
process.on('exit',function(){
var s=report.stats;
日志(“百分比:”+s.passes/(s.passes+s.failures));
进程退出(失败>0?1:0);
});
});
这节省了捕获process.stdout.write以及报告结构不必要的序列化和反序列化。我还添加了一个命令行来设置输出文件,以便您可以运行:
mocha-rjson--reporter options output file=rpt.json
另一种解决方案是创建您自己的报告器,就像。我只是将node\u modules/mocha/lib/reporters/json.js
中的json报告器复制到我的项目文件夹companyReporter.js
中的新文件中,并替换了这一行
Ln 69: process.stdout.write(JSON.stringify(obj, null, 2));
与
还需要更新myReporter.js的第9行和第10行的requires路径。我更喜欢这种方式,因为我没有弄乱进程.stdout.write
对代码的最后更改是更新报告器路径:
var Mocha = require('mocha');
process.on('message', function (message) {
const test = message.toString('utf8').replace(/\n$/,'');
new Mocha().
addFile(test).
reporter(__dirname + '/path/to/myReporter.js').
run(function(failures) {
process.exit(failures > 0 ? 1 : 0);
});
});
var Mocha = require('mocha');
process.on('message', function (message) {
const test = message.toString('utf8').replace(/\n$/,'');
new Mocha().
addFile(test).
reporter(__dirname + '/path/to/myReporter.js').
run(function(failures) {
process.exit(failures > 0 ? 1 : 0);
});
});