Javascript jestjs如何测试使用performance.now()的函数?
我正在为使用Javascript jestjs如何测试使用performance.now()的函数?,javascript,node.js,performance,jestjs,Javascript,Node.js,Performance,Jestjs,我正在为使用performance.now()的ES6类编写jestjs测试。但它似乎不起作用 有没有办法从jest.config.js全局使用perf hook?或者模拟性能并用例如日期覆盖它的方法 我已经尝试用Date覆盖classToTest.js上的性能,但由于导入时已经使用了performance,因此无法工作 简化示例: classToTest.test.js import ClassToTest from "./classToTest"; test("constructor wo
performance.now()的ES6类编写jestjs测试。但它似乎不起作用
有没有办法从jest.config.js
全局使用perf hook
?或者模拟性能
并用例如日期
覆盖它的方法
我已经尝试用Date
覆盖classToTest.js
上的性能,但由于导入时已经使用了performance
,因此无法工作
简化示例:
classToTest.test.js
import ClassToTest from "./classToTest";
test("constructor works", () => {
expect(new ClassToTest()).not.toBeNull();
});
const timer = performance.now();
class ClassToTest {
...
module.exports = {
setupFilesAfterEnv: [ './setup.js' ]
}
global.performance = require('perf_hooks').performance;
classToTest.js
import ClassToTest from "./classToTest";
test("constructor works", () => {
expect(new ClassToTest()).not.toBeNull();
});
const timer = performance.now();
class ClassToTest {
...
module.exports = {
setupFilesAfterEnv: [ './setup.js' ]
}
global.performance = require('perf_hooks').performance;
jest的输出是ReferenceError:performance未定义如果您的jest
测试环境是jsdom
(默认值),那么它提供了一个类似浏览器的环境,包括性能。现在将自动定义
如果您的Jest
测试环境是节点
,那么您需要提供自己的性能
全局
可以通过向阵列中添加安装文件来完成此操作:
jest.config.js
import ClassToTest from "./classToTest";
test("constructor works", () => {
expect(new ClassToTest()).not.toBeNull();
});
const timer = performance.now();
class ClassToTest {
...
module.exports = {
setupFilesAfterEnv: [ './setup.js' ]
}
global.performance = require('perf_hooks').performance;
…并在定义全局性能的设置文件中:
setup.js
import ClassToTest from "./classToTest";
test("constructor works", () => {
expect(new ClassToTest()).not.toBeNull();
});
const timer = performance.now();
class ClassToTest {
...
module.exports = {
setupFilesAfterEnv: [ './setup.js' ]
}
global.performance = require('perf_hooks').performance;
您是否在classToTest.js中导入了性能
const{performance}=require('perf_hooks')
Yes有效。同时更改为Date.now()也有效。但我希望能够按原样测试源代码并在其环境中运行,而不是使其适应测试环境。对不起,我仍然不明白。让我们暂时忘掉你的考试吧。假设ClassToTest
代码对我们来说是一个黑匣子,那么它怎么能在不导入它的情况下使用performance
?谢谢,这正是我想要的!我不得不升级我的jest安装以使其正常工作,似乎SetupFileAfterEnv是一个非常新的添加。很好的回答和解释。它也可以导入到需要的文件中,如const{performance}=require('perf_hooks')
(不需要安装,因为它是节点的一部分)。