cli: merge together all jest configs that are found in package.jsons

This commit is contained in:
Patrik Oldsberg
2020-07-15 18:54:47 +02:00
parent 63a13aa70b
commit b101453e4e
+30 -6
View File
@@ -58,13 +58,37 @@ async function getConfig() {
options.setupFilesAfterEnv = ['<rootDir>/setupTests.ts'];
}
return {
...options,
// We read all "jest" config fields in package.json files all the way to the filesystem root.
// All configs are merged together to create the final config, with longer paths taking precedence.
// The merging of the configs is shallow, meaning e.g. all transforms are replaced if new ones are defined.
const pkgJsonConfigs = [];
let currentPath = process.cwd();
// If the package has a jest object in package.json we merge that config in. This is the recommended
// location for configuring tests.
...require(path.resolve('package.json')).jest,
};
// Some sanity check to avoid infinite loop
for (let i = 0; i < 100; i++) {
const packagePath = path.resolve(currentPath, 'package.json');
const exists = fs.pathExistsSync(packagePath);
if (exists) {
try {
const data = fs.readJsonSync(packagePath);
if (data.jest) {
pkgJsonConfigs.unshift(data.jest);
}
} catch (error) {
throw new Error(
`Failed to parse package.json file reading jest configs, ${error}`,
);
}
}
const newPath = path.dirname(currentPath);
if (newPath === currentPath) {
break;
}
currentPath = newPath;
}
return Object.assign(options, ...pkgJsonConfigs);
}
module.exports = getConfig();