Jest globals配置无效

先说结论

配置文件中有projects字段的,需要在projects字段内部定义globals,外层的globals会被覆盖

const config = {
  ...,
  preset: 'ts-jest',
  projects: [
    {
      testMatch: [
        '<rootDir>/packages/p1/**/__tests__/*.test.*',
        '<rootDir>/packages/p2/**/__tests__/**/*.test.*',
      ],
      testEnvironment: 'jsdom',
      globals: {
        window: true,
        DEPRECATED_ADAPTER_COMPONENT: false,
        ENABLE_INNER_HTML: true,
        ENABLE_ADJACENT_HTML: true,
        ENABLE_SIZE_APIS: true,
        ENABLE_TEMPLATE_CONTENT: true,
        ENABLE_CLONE_NODE: true,
        ENABLE_CONTAINS: true,
        ENABLE_MUTATION_OBSERVER: true,
      },
    },
  ],
};

背景

Taro项目单测,报错ReferenceError: ENABLE_INNER_HTML is not defined

查阅 Taro文档 后得知使用jest需要在其config中添加一系列globals变量
在这里插入图片描述
但配置完成后依旧报错,且尝试直接在测试文件调用配置文件中定义的globals变量也是undefined

分析

各种谷歌也没找到相应的解决方法,于是开始阅读Jest源码

配置读取逻辑在<rootDir>/node_modules/jest-config/build/index.js/readConfigs

async function readConfigs(argv, projectPaths) {
  let globalConfig;
  let hasDeprecationWarnings;
  let configs = [];
  let projects = projectPaths;
  let configPath;

  // 读取配置文件外层config
  if (projectPaths.length === 1) {
    const parsedConfig = await readConfig(argv, projects[0]);
	...
	// 此时globals还存在
    configs = [parsedConfig.projectConfig];
	...
  }
  // 若存在projects字段
  if (projects.length > 0) {
	...
    const parsedConfigs = await Promise.all(
      projects
        .filter(root => {
          ...
          return true;
        })
        .map((root, projectIndex) => {
          ...
          // 读取projects字段配置
          return readConfig(
            argv,
            root,
            skipArgvConfigOption,
            configPath ? path().dirname(configPath) : cwd,
            projectIndex, // we wanna skip the warning if this is the "main" project
            projectIsCwd,
            projectIndex
          );
        })
    );
    ...
    // 覆盖第一步的configs,此时globals已消失
    configs = parsedConfigs.map(({projectConfig}) => projectConfig);
	...
  return {
    configs,
    globalConfig,
    hasDeprecationWarnings: !!hasDeprecationWarnings
  };
}

读取projects字段配置的readConfig函数也在这个文件中,感兴趣的可以去看看

后话

今天突发奇想读源码,果然代码这种纯客观的东西,直接看比问来问去要准确的多

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
jest.config.js是用于配置Jest测试框架的文件。它允许你自定义Jest的行为和设置,以满足你的项目需求。下面是一些常见的配置选项: 1. `preset`: 用于指定预设配置,可以是一个字符串或一个包含配置选项的对象。预设配置可以帮助你快速设置常见的测试环境,例如`@vue/cli-plugin-unit-jest`用于Vue项目。 2. `testEnvironment`: 指定测试运行的环境,默认为`jsdom`,可以是`node`、`jsdom`或者自定义的环境。 3. `testMatch`: 指定要运行的测试文件的匹配模式,默认为`**/__tests__/**/*.[jt]s?(x)`。你可以根据自己的项目结构和命名规范来修改。 4. `moduleFileExtensions`: 指定模块文件的扩展名,默认为`['js', 'json', 'jsx', 'ts', 'tsx', 'node']`。如果你的项目使用了其他扩展名的文件,可以在这里添加。 5. `transform`: 配置文件转换器,用于将不同类型的文件转换为可执行的JavaScript代码。例如,使用`babel-jest`可以将ES6代码转换为ES5代码。 6. `coverageThreshold`: 配置代码覆盖率的阈值,可以设置全局或每个文件的覆盖率要求。 7. `setupFilesAfterEnv`: 指定在运行测试之前需要执行的文件,可以用于设置全局的测试环境。 8. `snapshotSerializers`: 配置快照序列化器,用于自定义快照的序列化和反序列化过程。 9. `globals`: 全局变量的配置,可以在测试文件中直接使用。 以上是一些常见的配置选项,你可以根据自己的需求进行配置。如果你有具体的问题或需要更详细的介绍,请告诉我。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值