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

问题描述 投票:0回答:2

使用 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)

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

testing mocha.js reporting
2个回答
49
投票

您注意到的行为是 Mocha 的默认行为。除非另有说明,当您在命令行运行 Mocha 时,您将获得

spec
记者(其类名为
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);
    }
  });

此代码在Base报告器中的

之后
运行(
Base
Spec
之前初始化)。因此,当前面的代码片段中的处理程序运行时,测试已被标记为
slow
medium
fast
。正如你所看到的,只有当测试速度不快时,Mocha才会报告时间。

您可以通过将

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

如果您想强制每次测试的时间报告并使用像

spec
报告器一样工作的报告器,除了使用您自己的自定义报告器之外,我看不到其他方法。


0
投票

我很欣赏现有的答案,但读完后,我不明白如何使用 JS/TS 让我的测试不显示为红色(我不想使用自定义测试命令)。

要使您的测试不显示为红色(慢),请使用
.slow()

来自 [Mocha 文档]:(https://mochajs.org/#test-duration)

快速:在“慢”阈值一半内运行的测试将以绿色显示持续时间(如果有)。

我的测试通常需要 16 秒,但这很正常,因为它们涉及连接到本地 Solana 验证器并运行一堆事务。

.slow()
设置“慢阈值”。如果我将
.slow()
设置为
60 * SECONDS
,只要它们低于
30 * SECONDS

,我的测试就会呈绿色
it("does something", async () => {
  await doThing();
}).slow(60 * SECONDS);

希望很明显:

const SECONDS = 1000;

之前

red warnings

之后

no timing warnings

© www.soinside.com 2019 - 2024. All rights reserved.