@@ -31,7 +31,7 @@ if (process.env.SKIP_PREFLIGHT_CHECK !== 'true') {
3131// @remove -on-eject-end
3232
3333const jest = require ( 'jest' ) ;
34- const argv = process . argv . slice ( 2 ) ;
34+ let argv = process . argv . slice ( 2 ) ;
3535
3636// Watch unless on CI, in coverage mode, or explicitly running all tests
3737if (
@@ -57,5 +57,59 @@ argv.push(
5757 )
5858 )
5959) ;
60+
61+ // This is a very dirty workaround for https://github.com/facebook/jest/issues/5913.
62+ // We're trying to resolve the environment ourselves because Jest does it incorrectly.
63+ // TODO: remove this (and the `resolve` dependency) as soon as it's fixed in Jest.
64+ const resolve = require ( 'resolve' ) ;
65+ function resolveJestDefaultEnvironment ( name ) {
66+ const jestDir = path . dirname (
67+ resolve . sync ( 'jest' , {
68+ basedir : __dirname ,
69+ } )
70+ ) ;
71+ const jestCLIDir = path . dirname (
72+ resolve . sync ( 'jest-cli' , {
73+ basedir : jestDir ,
74+ } )
75+ ) ;
76+ const jestConfigDir = path . dirname (
77+ resolve . sync ( 'jest-config' , {
78+ basedir : jestCLIDir ,
79+ } )
80+ ) ;
81+ return resolve . sync ( name , {
82+ basedir : jestConfigDir ,
83+ } ) ;
84+ }
85+ let cleanArgv = [ ] ;
86+ let env = 'node' ;
87+ let next ;
88+ do {
89+ next = argv . shift ( ) ;
90+ if ( next === '--env' ) {
91+ env = argv . shift ( ) ;
92+ } else if ( next . indexOf ( '--env=' ) === 0 ) {
93+ env = next . substring ( '--env=' . length ) ;
94+ } else {
95+ cleanArgv . push ( next ) ;
96+ }
97+ } while ( argv . length > 0 ) ;
98+ argv = cleanArgv ;
99+ let resolvedEnv ;
100+ try {
101+ resolvedEnv = resolveJestDefaultEnvironment ( `jest-environment-${ env } ` ) ;
102+ } catch ( e ) {
103+ // ignore
104+ }
105+ if ( ! resolvedEnv ) {
106+ try {
107+ resolvedEnv = resolveJestDefaultEnvironment ( env ) ;
108+ } catch ( e ) {
109+ // ignore
110+ }
111+ }
112+ const testEnvironment = resolvedEnv || env ;
113+ argv . push ( '--env' , testEnvironment ) ;
60114// @remove -on-eject-end
61115jest . run ( argv ) ;
0 commit comments