From 783a81a1bc81b287c8ab3bb8d72461115a8f5ea1 Mon Sep 17 00:00:00 2001 From: Hung Viet Nguyen Date: Tue, 26 Apr 2022 09:23:16 +0700 Subject: [PATCH] feat: Use custom test.js in example. TODO: Move to jest-preview --- examples/create-react-app/package.json | 2 +- examples/create-react-app/scripts/test.js | 50 +++++++++++++++++++++++ 2 files changed, 51 insertions(+), 1 deletion(-) create mode 100644 examples/create-react-app/scripts/test.js diff --git a/examples/create-react-app/package.json b/examples/create-react-app/package.json index e7ad6302..37e8a7ea 100644 --- a/examples/create-react-app/package.json +++ b/examples/create-react-app/package.json @@ -19,7 +19,7 @@ "scripts": { "start": "react-scripts start", "build": "react-scripts build", - "test": "react-scripts test -- --config=jest.config.js", + "test": "node scripts/test.js", "test:nc": "npm run test -- --no-cache", "eject": "react-scripts eject", "jest-preview": "jest-preview", diff --git a/examples/create-react-app/scripts/test.js b/examples/create-react-app/scripts/test.js new file mode 100644 index 00000000..2fcf8ec3 --- /dev/null +++ b/examples/create-react-app/scripts/test.js @@ -0,0 +1,50 @@ +// 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. +// Read config from react-scripts directly +require('react-scripts/config/env'); + +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'); +} + +jest.run(argv);