如何以编程方式获得Mocha测试中的详细结果?

时间:2017-03-29 18:31:01

标签: node.js mocha chai

是否可以通过编程方式运行Mocha,然后以“详细”模式运行它并以编程方式使用结果?

现在我通过mocha模块在​​NodeJS中使用它(在套件内部使用chai进行断言)。 我想要的是获得有关失败测试的更多数据,而不是样式的一般错误:“期望为真并且得到错误。”

例如,有一种方法可以检查哪个断言失败以及为什么,如果在测试中有多个断言,或者接收有关特定测试的更多信息,如果是,如何?

1 个答案:

答案 0 :(得分:1)

当您run Mocha programmatically时,mocha.run()方法会返回Runner个对象。如果您收听fail事件,您将能够了解所有测试失败。这是一个改编自我上面链接的页面的例子:

var Mocha = require('mocha');
var fs = require('fs');
var path = require('path');

var mocha = new Mocha();
var testDir = '.'
fs.readdirSync(testDir).filter(function(file){
    // This gets all files that end with the string test.js (so
    // footest.js, bar_test.js, baz.test.js, etc.
    return file.substr(-7) === 'test.js';
}).forEach(function(file){
    mocha.addFile(path.join(testDir, file));
});

var runner = mocha.run(function(failures){
  process.on('exit', function () {
    process.exit(failures);
  });
});

// This is how we get results.
runner.on('fail', function(test, err){
    console.log(err);
});
  

例如,有一种方法可以检查哪个断言失败以及为什么,如果在测试中有多个断言,或者接收有关特定测试的更多信息,如果是,如何?

Mocha没有提供任何工具来将err处理程序中通过fail获得的异常与特定的断言相关联。这是因为Mocha被设计用于您想要的任何断言库。它只检测到断言在捕获由失败的断言引发的异常时失败。它不知道有关成功的断言或未执行的断言的任何信息,因为测试在失败的断言的早期结束。您可以从堆栈跟踪中对某些东西进行逆向工程,但Mocha不会帮助您实现此目标。