我正在为使用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 {
...


jest的输出是ReferenceError: performance is not defined

最佳答案

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

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

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

jest.config.js

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


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

setup.js

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

关于javascript - jestjs如何测试使用performance.now()的函数?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/57811827/

10-09 16:55