使用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 ms),而其他两个测试用例没有?有选择吗?我只找到--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)
看来,如果测试用例非常快,那我就没时间了......?
答案 0 :(得分:28)
您注意到的行为是Mocha的默认行为。除非另有说明,否则当您在命令行运行Mocha时,您将获得spec
报告者(其班级名称为Spec
)。
与摩卡捆绑在一起的所有记者均以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);
}
});
此代码在 Base
报告者(Base
初始化Spec
之前)之后运行。因此,当前一个代码段中的处理程序运行时,测试已标记为slow
,medium
或fast
。正如您所看到的,只有当测试不快时,Mocha才会报告时间。
您可以通过将--slow 0
传递到命令行来扩展Mocha报告时间的情况数。 (--slow -1
完全关闭时间报告。)但是,理论上你仍然可以获得0ms的测试,这些测试将被视为快速且没有任何时间报告。
如果您想强制每次测试的时间报告并使用与spec
记者类似的记者,除了使用您自己的自定义记者之外,我没有办法做到这一点。