Jest在多项目模式下无法识别配置文件

10
我们最近将两个不同的代码库合并成了一个单一的代码库。每个库都使用jest,具有自己的自定义配置,在它们各自的package.json文件中定义。
我想使用"--projects"标志从monorepo的根目录下运行Jest以跨两个项目运行测试。 我已经在monorepo的根目录中添加了一个"jest.config.js"文件:
module.exports = {
    projects: ['<rootDir>/projectA', '<rootDir>/projectB']
}; 

该运动员成功获取了两个项目的测试,但似乎没有使用每个项目的自定义配置。例如,在"projectA"中,我正在使用babel-plugin-module-resolver。当我仅在该项目中运行jest时,babel-jest可以成功识别该插件,并且它可以正常工作,但是当我从多项目模式的根目录运行它时,我会收到"找不到模块..."错误,表明未使用该插件。

同样,在"projectB"中,我正在使用自定义的setupTestFrameworkScriptFile。在该项目中运行jest可以成功运行该文件,但在从根目录运行时被忽略。

我对多项目模式的理解是,每个个体项目应保持其自己的设置/配置不变。我错过了什么吗?我需要在根目录中进行这些配置吗?


看看React是如何做的,似乎他们直接将“projects”指向了项目的配置文件:https://github.com/facebook/react/pull/10214/files#diff-b9cfc7f2cdf78a7f4b91a753d10865a2R123 - Kenrick
React 不再使用项目了。 - Sibelius Seraphini
1个回答

0

我认为jest多项目运行器存在一些错误,我们需要提供一些失败的示例,以便jest进行修复。几乎没有关于它的文档。

我通过提供自定义的babel-transformer而不是直接使用babel-jest来使其工作。

请查看此链接https://twitter.com/sseraphini/status/1061779382669316098

在包内使用此转换器。

const config = require('../shared/babel.config.js');

 const { createTransformer } = require('babel-jest');
 module.exports = createTransformer({
  ...config,
});

并将其用于您的根转换器

const { join, resolve } = require('path');
 const { createTransformer } = require('babel-jest');
 const packagePath = resolve('../');

const packageGlob = join(packagePath, '*');
 module.exports = createTransformer({
  babelrcRoots: packageGlob,
});

在 jest.config.js 中使用如下

transform: {
    '^.+\\.(js|ts|tsx)?$': '<rootDir>/test/babel-transformer',
},

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接