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

Nic*_*kis 5 mocha.js node.js chai

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

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

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

Lou*_*uis 3

当您以编程方式运行 Mocha时,该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);
});
Run Code Online (Sandbox Code Playgroud)

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

errMocha 不提供任何工具将处理程序中遇到的异常fail特定断言关联起来。这是因为 Mocha 被设计为与您想要的任何断言库一起使用。它仅在捕获失败断言引发的异常时才检测到断言已失败。它不知道有关成功断言或未执行断言的任何信息,因为测试在失败断言后提前结束。您也许可以从堆栈跟踪中对某些内容进行逆向工程,但 Mocha 不会帮助您实现此目标。