diff --git a/packages/react-scripts/scripts/utils/createJestConfig.js b/packages/react-scripts/scripts/utils/createJestConfig.js
index af085383f0b545ec3c3ad8125577a1e4d689a0c1..040c1f58b678fac87757032663ff55eab1ffe89e 100644
--- a/packages/react-scripts/scripts/utils/createJestConfig.js
+++ b/packages/react-scripts/scripts/utils/createJestConfig.js
@@ -22,8 +22,20 @@ module.exports = (resolve, rootDir, isEjecting) => {
   // in Jest configs. We need help from somebody with Windows to determine this.
   const config = {
     collectCoverageFrom: ['src/**/*.{js,jsx}'],
-    resolver: require.resolve('jest-pnp-resolver'),
-    setupFiles: [require.resolve('react-app-polyfill/jsdom')],
+
+    // TODO: this breaks Yarn PnP on eject.
+    // But we can't simply emit this because it'll be an absolute path.
+    // The proper fix is to write jest.config.js on eject instead of a package.json key.
+    // Then these can always stay as require.resolve()s.
+    resolver: isEjecting
+      ? 'jest-pnp-resolver'
+      : require.resolve('jest-pnp-resolver'),
+    setupFiles: [
+      isEjecting
+        ? 'react-app-polyfill/jsdom'
+        : require.resolve('react-app-polyfill/jsdom'),
+    ],
+
     setupTestFrameworkScriptFile: setupTestsFile,
     testMatch: [
       '<rootDir>/src/**/__tests__/**/*.{js,jsx}',