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

1l5u6lss  于 2023-03-06  发布在  Jest
关注(0)|答案(1)|浏览(190)

我正在为一个使用performance.now()的ES6类编写一个jestjs测试,但是它似乎不起作用。
有没有办法从jest.config.js全局使用perf-hooks?或者有没有办法模仿performance并用Date覆盖它?
我尝试过用Date覆盖classToTest.js上的性能,但由于它使用了导入时已经存在的performance,因此不起作用。
简化示例:

类到测试.测试.js

import ClassToTest from "./classToTest";

test("constructor works", () => {
  expect(new ClassToTest()).not.toBeNull();
});

类到测试.js

const timer = performance.now();

class ClassToTest {
...

jest的输出是ReferenceError: performance is not defined

z9ju0rcb

z9ju0rcb1#

如果您的Jest测试环境是jsdom(默认值),那么它提供了一个类似浏览器的环境,其中包括全局Window对象上的performance模拟,因此performance.now将被自动定义。
如果您的Jest测试环境是node,那么您需要提供自己的performance全局环境。
这可以通过向setupFilesAfterEnv数组添加一个安装文件来完成:

    • jest.配置js**
module.exports = {
  setupFilesAfterEnv: [ './setup.js' ]
}

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

    • 设置. js**
global.performance = require('perf_hooks').performance;

相关问题