2016-12-29 30 views
0

摩卡可以是invoked from a script,它有一个有用的JSON reporter,但是如何从调用脚本访问那个报告的结构?重定向标准输出工作:如何从脚本访问摩卡的json报告?

var Mocha = require('mocha'); 

var stats = {}; 
var oldWrite = process.stdout.write; 
process.stdout.write = function(txt) { 
    stats = JSON.parse(txt).stats; // write invoked in one gulp. 
}; 

new Mocha(). 
    addFile("test/toyTest"). 
    reporter("json", {stats: stats}). 
    run(function (failures) { 
    process.on('exit', function() { 
     process.stdout.write = oldWrite; 
     console.log("percentage: " + stats.passes/(stats.passes+stats.failures)); 
     process.exit(failures > 0 ? 1 : 0); 
    }); 
    }); 

,但我会期待一个更直接的解决方案。

回答

0

the code,得到的答复是“你不能”:

process.stdout.write(JSON.stringify(obj, null, 2));

由于上面的我的解决方案比明显少了几分,我创建了一个pull request添加一个记者选项传递目标对象:

var Mocha = require('mocha'); 
var report = {}; 

new Mocha(). 
    addFile("test/toyTest"). 
    reporter("json", {"output-object": report}). 
    run(function (failures) { 
    process.on('exit', function() { 
     var s = report.stats; 
     console.log("percentage: " + s.passes/(s.passes+s.failures)); 
     process.exit(failures > 0 ? 1 : 0); 
    }); 
    }); 

这节省了捕获process.stdout.write以及不必要的串行化和反串行化的报告结构。我还添加了一个命令行来设置输出文件,以便您可以运行:

mocha -R json --reporter-options output-file=rpt.json