123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138 |
- // @remove-on-eject-begin
- /**
- * Copyright (c) 2015-present, Facebook, Inc.
- *
- * This source code is licensed under the MIT license found in the
- * LICENSE file in the root directory of this source tree.
- */
- // @remove-on-eject-end
- 'use strict';
- // Do this as the first thing so that any code reading it knows the right env.
- process.env.BABEL_ENV = 'test';
- process.env.NODE_ENV = 'test';
- process.env.PUBLIC_URL = '';
- // Makes the script crash on unhandled rejections instead of silently
- // ignoring them. In the future, promise rejections that are not handled will
- // terminate the Node.js process with a non-zero exit code.
- process.on('unhandledRejection', err => {
- throw err;
- });
- // Ensure environment variables are read.
- require('../config/env');
- // @remove-on-eject-begin
- // Do the preflight check (only happens before eject).
- const verifyPackageTree = require('./utils/verifyPackageTree');
- if (process.env.SKIP_PREFLIGHT_CHECK !== 'true') {
- verifyPackageTree();
- }
- const verifyTypeScriptSetup = require('./utils/verifyTypeScriptSetup');
- verifyTypeScriptSetup();
- // @remove-on-eject-end
- const jest = require('jest');
- const execSync = require('child_process').execSync;
- let argv = process.argv.slice(2);
- function isInGitRepository() {
- try {
- execSync('git rev-parse --is-inside-work-tree', { stdio: 'ignore' });
- return true;
- } catch (e) {
- return false;
- }
- }
- function isInMercurialRepository() {
- try {
- execSync('hg --cwd . root', { stdio: 'ignore' });
- return true;
- } catch (e) {
- return false;
- }
- }
- // Watch unless on CI or explicitly running all tests
- if (
- !process.env.CI &&
- argv.indexOf('--watchAll') === -1 &&
- argv.indexOf('--watchAll=false') === -1
- ) {
- // https://github.com/facebook/create-react-app/issues/5210
- const hasSourceControl = isInGitRepository() || isInMercurialRepository();
- argv.push(hasSourceControl ? '--watch' : '--watchAll');
- }
- // @remove-on-eject-begin
- // This is not necessary after eject because we embed config into package.json.
- const createJestConfig = require('./utils/createJestConfig');
- const path = require('path');
- const paths = require('../config/paths');
- argv.push(
- '--config',
- JSON.stringify(
- createJestConfig(
- relativePath => path.resolve(__dirname, '..', relativePath),
- path.resolve(paths.appSrc, '..'),
- false
- )
- )
- );
- // This is a very dirty workaround for https://github.com/facebook/jest/issues/5913.
- // We're trying to resolve the environment ourselves because Jest does it incorrectly.
- // TODO: remove this as soon as it's fixed in Jest.
- const resolve = require('resolve');
- function resolveJestDefaultEnvironment(name) {
- const jestDir = path.dirname(
- resolve.sync('jest', {
- basedir: __dirname,
- })
- );
- const jestCLIDir = path.dirname(
- resolve.sync('jest-cli', {
- basedir: jestDir,
- })
- );
- const jestConfigDir = path.dirname(
- resolve.sync('jest-config', {
- basedir: jestCLIDir,
- })
- );
- return resolve.sync(name, {
- basedir: jestConfigDir,
- });
- }
- let cleanArgv = [];
- let env = 'jsdom';
- let next;
- do {
- next = argv.shift();
- if (next === '--env') {
- env = argv.shift();
- } else if (next.indexOf('--env=') === 0) {
- env = next.substring('--env='.length);
- } else {
- cleanArgv.push(next);
- }
- } while (argv.length > 0);
- argv = cleanArgv;
- let resolvedEnv;
- try {
- resolvedEnv = resolveJestDefaultEnvironment(`jest-environment-${env}`);
- } catch (e) {
- // ignore
- }
- if (!resolvedEnv) {
- try {
- resolvedEnv = resolveJestDefaultEnvironment(env);
- } catch (e) {
- // ignore
- }
- }
- const testEnvironment = resolvedEnv || env;
- argv.push('--env', testEnvironment);
- // @remove-on-eject-end
- jest.run(argv);
|