为什么Mocha没有为每次测试报告时间?

Rai*_*ner 14 testing reporting mocha.js

使用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)
Run Code Online (Sandbox Code Playgroud)

为什么对于两个测试用例我得到测试时间(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)
Run Code Online (Sandbox Code Playgroud)

看来,如果测试用例非常快,那我就没时间了......?

Lou*_*uis 33

您注意到的行为是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++;
  });
Run Code Online (Sandbox Code Playgroud)

你可以看到那些测试花费的时间超过被认为是慢的毫秒数(--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);
    }
  });
Run Code Online (Sandbox Code Playgroud)

此代码在报告器中的代码之后运行Base(Base之前初始化Spec).因此,当前一个代码段中的处理程序运行时,测试已被标记为slow,mediumfast.如您所见,只有在测试不快时,Mocha才会报告时间.

您可以通过传递--slow 0到命令行来扩展Mocha报告时间的情况数.(--slow -1完全关闭时间报告.)但是,理论上你仍然可以获得0ms的测试,这些测试将被视为快速且没有任何时间报告.

如果你想强制每个测试的时间报告并使用像spec记者一样工作的记者,除了使用你自己的自定义记者之外,我没有办法做到这一点.

  • 非常感谢!广泛而清晰。 (2认同)