mirror of
https://github.com/zhigang1992/create-react-app.git
synced 2026-04-23 12:48:00 +08:00
Make coverage and snapshot Jest options overridable in package.json (#1830)
* Override Jest config collectCoverageFrom with package.json * Protect against overriding other options * Better error message * Create Jest config early on eject * Tweak wording * Dry it up
This commit is contained in:
committed by
Dan Abramov
parent
db2f2ed9d9
commit
10a180be9b
13
packages/react-scripts/scripts/eject.js
vendored
13
packages/react-scripts/scripts/eject.js
vendored
@@ -78,6 +78,13 @@ inquirer
|
||||
folders.forEach(verifyAbsent);
|
||||
files.forEach(verifyAbsent);
|
||||
|
||||
// Prepare Jest config early in case it throws
|
||||
const jestConfig = createJestConfig(
|
||||
filePath => path.posix.join('<rootDir>', filePath),
|
||||
null,
|
||||
true
|
||||
);
|
||||
|
||||
console.log();
|
||||
console.log(cyan(`Copying files into ${appPath}`));
|
||||
|
||||
@@ -151,11 +158,7 @@ inquirer
|
||||
console.log(cyan('Configuring package.json'));
|
||||
// Add Jest config
|
||||
console.log(` Adding ${cyan('Jest')} configuration`);
|
||||
appPackage.jest = createJestConfig(
|
||||
filePath => path.posix.join('<rootDir>', filePath),
|
||||
null,
|
||||
true
|
||||
);
|
||||
appPackage.jest = jestConfig;
|
||||
|
||||
// Add Babel config
|
||||
console.log(` Adding ${cyan('Babel')} preset`);
|
||||
|
||||
@@ -10,6 +10,7 @@
|
||||
'use strict';
|
||||
|
||||
const fs = require('fs');
|
||||
const chalk = require('chalk');
|
||||
const paths = require('../../config/paths');
|
||||
|
||||
module.exports = (resolve, rootDir, isEjecting) => {
|
||||
@@ -27,7 +28,7 @@ module.exports = (resolve, rootDir, isEjecting) => {
|
||||
setupTestFrameworkScriptFile: setupTestsFile,
|
||||
testMatch: [
|
||||
'<rootDir>/src/**/__tests__/**/*.js?(x)',
|
||||
'<rootDir>/src/**/?(*.)(spec|test).js?(x)'
|
||||
'<rootDir>/src/**/?(*.)(spec|test).js?(x)',
|
||||
],
|
||||
testEnvironment: 'node',
|
||||
testURL: 'http://localhost',
|
||||
@@ -46,5 +47,43 @@ module.exports = (resolve, rootDir, isEjecting) => {
|
||||
if (rootDir) {
|
||||
config.rootDir = rootDir;
|
||||
}
|
||||
const overrides = Object.assign({}, require(paths.appPackageJson).jest);
|
||||
const supportedKeys = [
|
||||
'collectCoverageFrom',
|
||||
'coverageReporters',
|
||||
'coverageThreshold',
|
||||
'snapshotSerializers',
|
||||
];
|
||||
if (overrides) {
|
||||
supportedKeys.forEach(key => {
|
||||
if (overrides.hasOwnProperty(key)) {
|
||||
config[key] = overrides[key];
|
||||
delete overrides[key];
|
||||
}
|
||||
});
|
||||
const unsupportedKeys = Object.keys(overrides);
|
||||
if (unsupportedKeys.length) {
|
||||
console.error(
|
||||
chalk.red(
|
||||
'Out of the box, Create React App only supports overriding ' +
|
||||
'these Jest options:\n\n' +
|
||||
supportedKeys.map(key => chalk.bold(' \u2022 ' + key)).join('\n') +
|
||||
'.\n\n' +
|
||||
'These options in your package.json Jest configuration ' +
|
||||
'are not currently supported by Create React App:\n\n' +
|
||||
unsupportedKeys
|
||||
.map(key => chalk.bold(' \u2022 ' + key))
|
||||
.join('\n') +
|
||||
'\n\nIf you wish to override other Jest options, you need to ' +
|
||||
'eject from the default setup. You can do so by running ' +
|
||||
chalk.bold('npm run eject') +
|
||||
' but remember that this is a one-way operation. ' +
|
||||
'You may also file an issue with Create React App to discuss ' +
|
||||
'supporting more options out of the box.\n'
|
||||
)
|
||||
);
|
||||
process.exit(1);
|
||||
}
|
||||
}
|
||||
return config;
|
||||
};
|
||||
|
||||
Reference in New Issue
Block a user