运行 以编程方式摩卡并将结果传递给变量或函数
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);
});
}
我已经使用 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);
});
}