testing - 为什么 Mocha 不报告每次测试的时间?

标签 testing mocha.js reporting

使用 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 报告程序(其类名为 Spec)。

所有与 Mocha 绑定(bind)的报告器都基于 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 报告器中的代码之后运行(BaseSpec 之前初始化)。因此,当前面代码片段中的处理程序运行时,测试已被标记为 slowmediumfast。如您所见,只有当测试速度不快时,Mocha 才会报告时间。

您可以通过将 --slow 0 传递给命令行来扩展 Mocha 报告时间的情况的数量。 (--slow -1 完全关闭时间报告。)但是,理论上您仍然可以获得耗时 0 毫秒的测试,并且这些测试将被视为快速且不会报告任何时间。

如果您想为每个测试强制报告时间并使用像 spec 报告器一样工作的报告器,除了使用您自己的自定义报告器之外,我看不到其他方法。

关于testing - 为什么 Mocha 不报告每次测试的时间?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31975168/

相关文章:

reporting-services - 在 Reporting Services 2008 中显示时间

python - 获取笔记本的详细实时报告/监控

iphone - 在 iPhone 上自动测试游戏

testing - 当 mocha + enzyme + chai 包装在 Provider 组件中时,如何测试 react-native 组件

c++ - C++ API 的消费者驱动合约测试

javascript - 如何在node js中抛出错误并捕获它mocha

javascript - 我可以将webdriver v4测试方法链重写为v5(电流光谱/Electron 测试)

grails - 在Grails中,如何将 ListView 呈现为Jasper报告?

android - 如何在不连接设备或模拟器的情况下运行 Android 测试用例?

java - SpringBoot 测试错误(无法解析方法 'thenReturn(Entity) )