为什么 Mocha 不报告每次测试的时间?
Why doesn't Mocha report time for every test?
使用 mocha 进行 node.js 单元测试,例如此输出:
Suite One:
call Home Page
√ should return correct result (65ms)
call Login Page
√ should return empty load
do Login
√ should return login details (53ms)
call Dashboard
√ should return empty load
6 passing (192ms)
为什么我得到两个测试用例的测试时间(65/53 毫秒),而其他两个用例却没有?有特定的选择吗?我只找到 --slow
但仅此而已。
添加:如果测试很慢,我会为所有测试用例获取时间:
Suite One:
call Home Page
√ should return correct result (1155ms)
call Login Page
√ should return empty load (359ms)
do Login
√ should return login details (703ms)
call Dashboard
√ should return empty load (347ms)
看来,如果测试用例非常快,那我就没时间了..?
您注意到的行为是 Mocha 的默认行为。除非另有说明,当您在命令行 运行 Mocha 时,您会得到 spec
报告者(其 class 名称为 Spec
)。
所有与 Mocha 捆绑的报告器都基于 Base
报告器,它具有以下代码:
runner.on('pass', function(test){
stats.passes = stats.passes || 0;
var medium = test.slow() / 2;
test.speed = test.duration > test.slow()
? 'slow'
: test.duration > medium
? 'medium'
: 'fast';
stats.passes++;
});
您可以在那里看到花费超过被视为缓慢的毫秒数(命令行中的 --slow
选项,默认 75 毫秒)的测试被标记为 slow
。超过一半的标记为medium
,小于一半的标记为fast
.
Spec
记者的代码是这样做的:
runner.on('pass', function(test){
if ('fast' == test.speed) {
var fmt = indent()
+ color('checkmark', ' ' + Base.symbols.ok)
+ color('pass', ' %s ');
cursor.CR();
console.log(fmt, test.title);
} else {
var fmt = indent()
+ color('checkmark', ' ' + Base.symbols.ok)
+ color('pass', ' %s ')
+ color(test.speed, '(%dms)');
cursor.CR();
console.log(fmt, test.title, test.duration);
}
});
此代码 运行s 在 Base
报告者中的 之后(Base
在 Spec
之前初始化)。因此,当处理程序在前面的代码片段 运行 时,测试已被标记为 slow
、medium
或 fast
。可以看到,只有测试速度不快,mocha才会报时间
您可以通过将 --slow 0
传递给命令行来扩展 Mocha 报告时间的情况的数量。 (--slow -1
完全关闭时间报告。)但是,理论上您仍然可以获得花费 0 毫秒的测试,并且这些测试将被视为快速且没有任何时间报告。
如果您想为每个测试强制报告时间并使用像 spec
报告器一样工作的报告器,除了使用您自己的自定义报告器之外,我看不到其他方法。
使用 mocha 进行 node.js 单元测试,例如此输出:
Suite One:
call Home Page
√ should return correct result (65ms)
call Login Page
√ should return empty load
do Login
√ should return login details (53ms)
call Dashboard
√ should return empty load
6 passing (192ms)
为什么我得到两个测试用例的测试时间(65/53 毫秒),而其他两个用例却没有?有特定的选择吗?我只找到 --slow
但仅此而已。
添加:如果测试很慢,我会为所有测试用例获取时间:
Suite One:
call Home Page
√ should return correct result (1155ms)
call Login Page
√ should return empty load (359ms)
do Login
√ should return login details (703ms)
call Dashboard
√ should return empty load (347ms)
看来,如果测试用例非常快,那我就没时间了..?
您注意到的行为是 Mocha 的默认行为。除非另有说明,当您在命令行 运行 Mocha 时,您会得到 spec
报告者(其 class 名称为 Spec
)。
所有与 Mocha 捆绑的报告器都基于 Base
报告器,它具有以下代码:
runner.on('pass', function(test){
stats.passes = stats.passes || 0;
var medium = test.slow() / 2;
test.speed = test.duration > test.slow()
? 'slow'
: test.duration > medium
? 'medium'
: 'fast';
stats.passes++;
});
您可以在那里看到花费超过被视为缓慢的毫秒数(命令行中的 --slow
选项,默认 75 毫秒)的测试被标记为 slow
。超过一半的标记为medium
,小于一半的标记为fast
.
Spec
记者的代码是这样做的:
runner.on('pass', function(test){
if ('fast' == test.speed) {
var fmt = indent()
+ color('checkmark', ' ' + Base.symbols.ok)
+ color('pass', ' %s ');
cursor.CR();
console.log(fmt, test.title);
} else {
var fmt = indent()
+ color('checkmark', ' ' + Base.symbols.ok)
+ color('pass', ' %s ')
+ color(test.speed, '(%dms)');
cursor.CR();
console.log(fmt, test.title, test.duration);
}
});
此代码 运行s 在 Base
报告者中的 之后(Base
在 Spec
之前初始化)。因此,当处理程序在前面的代码片段 运行 时,测试已被标记为 slow
、medium
或 fast
。可以看到,只有测试速度不快,mocha才会报时间
您可以通过将 --slow 0
传递给命令行来扩展 Mocha 报告时间的情况的数量。 (--slow -1
完全关闭时间报告。)但是,理论上您仍然可以获得花费 0 毫秒的测试,并且这些测试将被视为快速且没有任何时间报告。
如果您想为每个测试强制报告时间并使用像 spec
报告器一样工作的报告器,除了使用您自己的自定义报告器之外,我看不到其他方法。