运行 以编程方式摩卡并将结果传递给变量或函数

Run Mocha programmatically and pass results to variable or function

我已经使用 ZombieJS 和 Chai 在 mocha 中设置了一套测试。测试加载网站并检查各种服务是否已正确预订并向网站访问者显示。

我的目标是每天 运行 进行测试,然后将结果通过电子邮件发送给我的团队。测试全部 运行ning 符合预期,但我遇到的障碍如下。

如何将 JSON 报告者结果传递给另一个 node.js 脚本,我可以在其中通过电子邮件发送结果。使用 nodemailer 和下划线模板构建和发送电子邮件将非常简单。

我目前的想法是有两种方法。 运行 使用 shell 脚本进行 mocha 测试并将 JSON 输出通过管道传输到节点脚本并从命令行参数处理 JSON。像...

mocha test/services/homepage.js > node email.js

另一种选择是 运行 从节点脚本中进行测试,并在变量中获取返回的结果。我一直在使用这里的信息来 运行 节点内的测试。

https://github.com/mochajs/mocha/wiki/Using-mocha-programmatically

这个 运行 是正确的,但我不知道如何将 JSON 报告器结果从下面的代码中获取到变量中。

var Mocha = require('mocha'),
    Suite = Mocha.Suite,
    Runner = Mocha.Runner,
    Test = Mocha.Test;

// First, you need to instantiate a Mocha instance

var mocha = new Mocha({
    reporter: 'json'
});

var suite = new Suite('JSON suite', 'root');
var runner = new Runner(suite);
var mochaReporter = new mocha._reporter(runner);

mocha.addFile(
    '/Users/dominic/Git/testing-rig/test/services/homepage.js'
);

runner.run(function(failures) {
    // the json reporter gets a testResults JSON object on end
    var testResults = mochaReporter.testResults;

    console.log(testResults);
    // send your email here
});

嗯,通常人们会使用 CI 机器人来实现您想要做的事情。然而,关于你从 JSON 记者那里得到结果的直接问题,我不知道是否有更好的方法来实现它,但这是我在阅读 mocha 源代码后要做的。您必须自己创建 Suite、Runner 并获取报告器(从 https://github.com/mochajs/mocha/blob/master/test%2Freporters%2Fjson.js 复制):

var mocha = new Mocha({
    reporter: 'json'
});
var suite = new Suite('JSON suite', 'root');
var runner = new Runner(suite);
var mochaReporter = new mocha._reporter(runner);

runner.run(function(failures) {
    // the json reporter gets a testResults JSON object on end
    var testResults = mochaReporter.testResults;
    // send your email here
});

您可以像在 https://github.com/mochajs/mocha/blob/master/lib/runner.js#L40 中那样收听跑步者事件并构建您自己的报告。

var Mocha = require('mocha');

var mocha = new Mocha({});

mocha.addFile('/Users/dominic/Git/testing-rig/test/services/homepage.js')

mocha.run()
    .on('test', function(test) {
        console.log('Test started: '+test.title);
    })
    .on('test end', function(test) {
        console.log('Test done: '+test.title);
    })
    .on('pass', function(test) {
        console.log('Test passed');
        console.log(test);
    })
    .on('fail', function(test, err) {
        console.log('Test fail');
        console.log(test);
        console.log(err);
    })
    .on('end', function() {
        console.log('All done');
    });

我建议使用此处解释的 mocha 记者 https://github.com/mochajs/mocha/wiki/Third-party-reporters

像这样调用 mocha

MyReporter = require('./MyReporter');
mocha({ reporter: MyReporter })`

MyReporter.js 文件将如下所示

var mocha = require('mocha');
module.exports = MyReporter;

function MyReporter(runner) {
  mocha.reporters.Base.call(this, runner);
  var passes = 0;
  var failures = 0;

  runner.on('pass', function(test){
    passes++;
    console.log('pass: %s', test.fullTitle());
  });

  runner.on('fail', function(test, err){
    failures++;
    console.log('fail: %s -- error: %s', test.fullTitle(), err.message);
  });

  runner.on('end', function(){
    console.log('end: %d/%d', passes, passes + failures);
    process.exit(failures);
  });
}