在 beforeEach() 和 afterEach() 中获取 Jest 测试名称

Jon*_*Jon 10 jestjs

我正在运行 Jest,并尝试记录每个测试的开始和结束时间戳。我正在尝试将时间戳记录粘贴到beforeEach()afterEach()块内。beforeEach()如何在and块中记录 Jest 测试的名称afterEach()

另外,是否有一种更全局的方法可以在所有测试之前和之后记录测试名称和时间戳,而无需使用beforeEach()afterEach()

Ilm*_*123 18

您可以像这样在 jest 中访问当前测试的名称:

expect.getState().currentTestName
Run Code Online (Sandbox Code Playgroud)

此方法也适用于beforeEach/afterEach

唯一的缺点是它还将包含当前描述部分的名称。(这可能没问题,具体取决于您想要做什么。

此外,它也不会为您提供您要求的时间信息。


Est*_*ask 3

有关当前正在运行的测试的信息在 中不可用beforeEach。与 Jasmine 类似,套件对象在 Jest 中可用作函数this中的上下文describe,可以修补规范定义以公开所需的数据。一种更简单的方法是为it拦截测试名称的全局定义自定义包装函数。

自定义记者是做到这一点的更好方法。Reporter 界面是自记录的,必要的数据可在testResult.

性能测量已经可用:

module.exports = class TimeReporter {
  onTestResult(test, testResult, aggregatedResult) {
    for (let { title, duration } of testResult.testResults)
        console.log(`test '${title}': ${duration} ms`);
  }
}
Run Code Online (Sandbox Code Playgroud)

可以这样使用:

reporters: ['default', "<rootDir>/time-reporter.js"]
Run Code Online (Sandbox Code Playgroud)

正如所指出的,有beforeAll和,它们每个测试组afterAll运行一次​​。describe