Jest自定义环境类初始化报错:如何正确实例化并测试不同testEnvironmentOptions
解决Jest自定义环境类初始化时的TypeError问题
问题场景
我想测试带有不同testEnvironmentOptions的Jest自定义环境类,编写了如下自定义环境类和测试代码,但实例化时抛出「TypeError: Cannot destructure property 'projectConfig' of 'config' as it is undefined」错误,请问如何正确初始化该类?
自定义环境类代码
const NodeEnvironment = require('jest-environment-node'); class CustomEnvironment extends NodeEnvironment { constructor(config, context) { super(config, context); } async setup() { await super.setup(); } async teardown() { await super.teardown(); } } module.exports = CustomEnvironment;
测试代码
it('some Test', function() { const instance = new CustomEnvironment({ testEnvironmentOptions: { providers: [] } }); });
报错信息
TypeError: Cannot destructure property 'projectConfig' of 'config' as it is undefined. 14 | 15 | constructor(config, context) { > 16 | super(config, context);
解决方案
问题出在你传给CustomEnvironment的配置不完整。Jest的NodeEnvironment父类构造函数需要一个包含projectConfig核心属性的完整配置对象,testEnvironmentOptions是嵌套在projectConfig里的,不能直接作为顶层属性传入。
正确的初始化方式是构造符合Jest要求的config对象,至少包含projectConfig(内部嵌套你的testEnvironmentOptions):
it('some Test', function() { const instance = new CustomEnvironment({ projectConfig: { testEnvironmentOptions: { providers: [] } }, // 可根据需求补充其他必要属性,比如rootDir rootDir: process.cwd() }); });
如果你的自定义环境需要用到更多Jest配置属性,可以参考Jest的Config接口定义补充对应值。另外,context参数为可选,若需要可传入空对象或必要的上下文信息。
内容的提问来源于stack exchange,提问作者user664859
相关产品推荐
相关产品推荐

