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

时间:2019-09-05 19:22:24

标签: javascript node.js performance jestjs

我正在为使用performance.now()的ES6类编写一个jestjs测试。但这似乎不起作用。

是否有一种方法可以从perf-hooks全局访问jest.config.js?还是一种模拟performance并用Date覆盖它的方法?

我尝试使用classToTest.js来覆盖Date的性能,但是由于它已经在导入上使用performance,因此无法正常工作。

简化示例:

classToTest.test.js

import ClassToTest from "./classToTest";

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

classToTest.js

const timer = performance.now();

class ClassToTest {
...

玩笑的输出是ReferenceError: performance is not defined

1 个答案:

答案 0 :(得分:0)

如果您的Jest测试环境为jsdom(默认设置),则它提供了一个包含a mock for performance on the global Window object的类似浏览器的环境,因此performance.now将被自动定义。 / p>

如果您的Jest测试环境为node,则需要提供自己的全局performance

可以通过将安装文件添加到setupFilesAfterEnv数组来完成:

jest.config.js

module.exports = {
  setupFilesAfterEnv: [ './setup.js' ]
}

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

setup.js

global.performance = require('perf_hooks').performance;