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
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值