惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

Y
Y Combinator Blog
让小产品的独立变现更简单 - ezindie.com
让小产品的独立变现更简单 - ezindie.com
OSCHINA 社区最新新闻
OSCHINA 社区最新新闻
V
V2EX
博客园 - 三生石上(FineUI控件)
Hugging Face - Blog
Hugging Face - Blog
奇客Solidot–传递最新科技情报
奇客Solidot–传递最新科技情报
罗磊的独立博客
博客园_首页
量子位
雷峰网
雷峰网
GbyAI
GbyAI
小众软件
小众软件
酷 壳 – CoolShell
酷 壳 – CoolShell
D
DataBreaches.Net
H
Hackread – Cybersecurity News, Data Breaches, AI and More
The Cloudflare Blog
IT之家
IT之家
WordPress大学
WordPress大学
人人都是产品经理
人人都是产品经理
Apple Machine Learning Research
Apple Machine Learning Research
P
Proofpoint News Feed
钛媒体:引领未来商业与生活新知
钛媒体:引领未来商业与生活新知
博客园 - 聂微东

晚花行乐

马克卡尼在2026年达沃斯论坛上的讲话(阅读材料) | 晚花行乐 鸡娃如何用力才是恰到好处 | 晚花行乐 读万卷书,行万里路的辩证关系 | 晚花行乐 反对培训机构掐尖招生 | 晚花行乐 小泽和建国会谈最后10分钟全文(阅读材料) | 晚花行乐 来看看 DeepSeek 怎么鸡娃 | 晚花行乐 谈谈基本功 | 晚花行乐 惠普 ProDesk SFF PC 各系列参数对比 | 晚花行乐 解决瘦客户机上安装 Debian 12 启动失败问题 | 晚花行乐 意拾喻言:老外写的文言文 | 晚花行乐 笠翁对韵中的典故(十三元) | 晚花行乐 谈谈中考取消四小门 | 晚花行乐 亚马逊云科技产品免费试用攻略(3) - 对象存储服务 | 晚花行乐 在 Windows 10 LTSC 版本上安装 WSL2 | 晚花行乐 Debian 12 的常用配置项 | 晚花行乐 在 Debian 12 上安装 Nvidia 显卡驱动程序 | 晚花行乐 解决 Debian 12 关机失败问题 | 晚花行乐 解决 VS Code 自动更新版本后卡在连接界面 | 晚花行乐 观看巴黎奥运会有感 | 晚花行乐 在 Windows10 上安装惠普旧打印机驱动程序 | 晚花行乐 欢迎关注公众号:晚花行乐 | 晚花行乐 如何编写拼写检查器 | 晚花行乐 亚马逊云科技产品免费试用攻略(2) - 云服务器 | 晚花行乐 Pandas 中 axis 参数的理解(附实例) | 晚花行乐 我打算命个名,叫什么什么 Manager | 晚花行乐 上海武康路历史建筑一览 | 晚花行乐 Python 实现简单的数学表达式解析并处理 | 晚花行乐 观看马拉松的感悟 | 晚花行乐 Python 保存 Cookies 到文件并再次读取 | 晚花行乐 如何为 Hugo 静态网站添加评论功能 | 晚花行乐
为 Mocha.js 编写自定义的 reporter | 晚花行乐
2019-07-23 · via 晚花行乐

Mocha.js 有一些自带的 reporter,但是这些有时候不能完全满足自己的需求,有些信息冗余,有些信息缺失。其实我们可以自己编写reporter。

自定义reporter

如果你对 Mocha 文档里介绍的一些 自带的reporter 不满意,还可以发挥创造力,自己编写 reporter 的函数。使用下面的方式调用

mocha ---reporter reporter.js

或者用 mocharc 配置文件:

"reporter": "reporter.js"

官方例子

这篇官方 wiki 介绍了一个基本可用的例子:

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);
  });
}

如此看来,自定义reporter的编写其实很简单:只要自定义一个函数,在函数的参数 runner 上注册已有的事件钩子即可。

事件钩子

支持的事件钩子有如下几种:

事件名称触发条件回调函数的参数属性
“start”整个测试开始执行时
“end”整个测试执行结束时
“suite”测试集(describe 所定义的用例集合)开始执行时触发suitesuite.title suite的名称,也就是describe 里规定的描述
“suite end”测试集(以及所有的子集)执行结束suite
“test”单个测试用例(it 所定义的用例集合)执行开始testtest.title test的名称,也就是 it 里规定的描述文字
test.fullTitle() 包含所属 suite 的 test的名称
“test end”单个测试用例执行结束
“pass”单个测试用例执行通过test
“fail”单个测试用例执行失败test, err
“pending”单个测试用例执行暂不执行test

注意,除了describe 定义的suite以外,还有一个默认的"顶级"suite,包含所有要执行的 describe 的顶级集合。虽然在用例执行过程中不可见,但是会触发 “suite” 和 “suite end” 事件。“顶级"suite有一个字段 root=true ,可以用于排除,例如:

runner.on("suite", function(suite) {
    if (suite.root) {
      return;
    }
    ....
}

runner的属性

函数的参数 runner,是测试的执行器,包含了测试过程相关的信息:比如 runner.stats 包含了统计信息

stats: { 
    suites: 0, 
    tests: 0, 
    passes: 0, 
    pending: 0, 
    failures: 0
} 

继承 reporter

官方例子 的最后,还有一句如何继承已有 reporter 的方法:

// To have this reporter "extend" a built-in reporter uncomment the following line:
// mocha.utils.inherits(MyReporter, mocha.reporters.Spec);

比如我想继承默认的失败原因列表,这个列表来自 reporter 基类的 epilogue() 函数,如果自己写会很麻烦,但是只需要一行语句就可以继承下来:

runner.once("end", this.epilogue.bind(this));
mocha.utils.inherits(MyReporter, mocha.reporters.Base);

各位读后有什么想法,请在下方留言吧!如果对本文有疑问或者寻求合作,欢迎 联系邮箱邮箱已到剪贴板

精彩评论