jestjs 如何测试使用 Performance.now() 的函数?

Jon*_*nas 6 javascript performance node.js jestjs performance.now

我正在为使用performance.now(). 但这似乎不起作用。

perf-hooks有没有办法从全球范围内使用jest.config.jsperformance或者用例如来模拟和覆盖它的方法Date

我尝试过使用classToTest.jswith来覆盖性能Date,但是因为它performance已经在导入时使用了,所以不起作用。

简化示例:

classToTest.test.js

import ClassToTest from "./classToTest";

test("constructor works", () => {
  expect(new ClassToTest()).not.toBeNull();
});
Run Code Online (Sandbox Code Playgroud)

类测试.js

const timer = performance.now();

class ClassToTest {
...
Run Code Online (Sandbox Code Playgroud)

jest 的输出是ReferenceError: performance is not defined.

Bri*_*ams 10

如果您的Jest测试环境是jsdom(默认),那么它提供了一个类似浏览器的环境,其中包含全局对象的模拟performanceWindow,因此performance.now将自动定义。

如果您的Jest测试环境是,node那么您将需要提供您自己的performance全局。

这可以通过向数组添加安装文件来完成setupFilesAfterEnv

笑话配置.js

module.exports = {
  setupFilesAfterEnv: [ './setup.js' ]
}
Run Code Online (Sandbox Code Playgroud)

...并在定义全局的设置文件中performance

安装程序.js

global.performance = require('perf_hooks').performance;
Run Code Online (Sandbox Code Playgroud)