Skip to content

Commit

Permalink
Update Jest (facebook#530)
Browse files Browse the repository at this point in the history
* Update Jest

* Remove default snapshot test

* Fix a few things

* Add a simple default test

* App.spec.js -> App.test.js

* Fix e2e test

* Bump Jest
  • Loading branch information
gaearon authored and George Czabania committed Sep 7, 2016
1 parent 8c96b72 commit 840ad29
Show file tree
Hide file tree
Showing 9 changed files with 51 additions and 64 deletions.
7 changes: 0 additions & 7 deletions config/jest/environment.js

This file was deleted.

9 changes: 4 additions & 5 deletions package.json
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,7 @@
"create-react-app": "node global-cli/index.js --scripts-version \"$PWD/`npm pack`\"",
"e2e": "tasks/e2e.sh",
"start": "node scripts/start.js --debug-template",
"test": "node scripts/test.js --debug-template"
"test": "node scripts/test.js --debug-template --watch --env=jsdom"
},
"files": [
"PATENTS",
Expand All @@ -31,7 +31,7 @@
"autoprefixer": "6.4.0",
"babel-core": "6.14.0",
"babel-eslint": "6.1.2",
"babel-jest": "14.1.0",
"babel-jest": "15.0.0",
"babel-loader": "6.2.5",
"babel-plugin-transform-class-properties": "6.11.5",
"babel-plugin-transform-object-rest-spread": "6.8.0",
Expand Down Expand Up @@ -62,7 +62,7 @@
"html-loader": "0.4.3",
"html-webpack-plugin": "2.22.0",
"http-proxy-middleware": "0.17.0",
"jest": "14.1.0",
"jest": "15.0.1",
"json-loader": "0.5.4",
"object-assign": "4.1.0",
"opn": "4.0.2",
Expand All @@ -81,8 +81,7 @@
"devDependencies": {
"bundle-deps": "1.0.0",
"react": "^15.3.0",
"react-dom": "^15.3.0",
"react-test-renderer": "^15.3.0"
"react-dom": "^15.3.0"
},
"optionalDependencies": {
"fsevents": "1.0.14"
Expand Down
11 changes: 6 additions & 5 deletions scripts/eject.js
Original file line number Diff line number Diff line change
Expand Up @@ -41,7 +41,6 @@ prompt(
path.join('config', 'webpack.config.prod.js'),
path.join('config', 'jest', 'CSSStub.js'),
path.join('config', 'jest', 'FileStub.js'),
path.join('config', 'jest', 'environment.js'),
path.join('config', 'jest', 'transform.js'),
path.join('scripts', 'build.js'),
path.join('scripts', 'start.js'),
Expand Down Expand Up @@ -99,17 +98,19 @@ prompt(
});

console.log('Updating scripts');
delete appPackage.scripts['eject'];
Object.keys(appPackage.scripts).forEach(function (key) {
appPackage.scripts[key] = 'node ./scripts/' + key + '.js'
appPackage.scripts[key] = appPackage.scripts[key]
.replace(/react-scripts test/g, 'jest')
.replace(/react-scripts (\w+)/g, 'node scripts/$1.js');
});
delete appPackage.scripts['eject'];

appPackage.scripts.test = 'jest';
// Add Jest config
appPackage.jest = createJestConfig(
filePath => path.join('<rootDir>', filePath)
);

// explicitly specify ESLint config path for editor plugins
// Explicitly specify ESLint config path for editor plugins
appPackage.eslintConfig = {
extends: './config/eslint.js',
};
Expand Down
11 changes: 6 additions & 5 deletions scripts/init.js
Original file line number Diff line number Diff line change
Expand Up @@ -23,10 +23,12 @@ module.exports = function(appPath, appName, verbose, originalDirectory) {
appPackage.devDependencies = appPackage.devDependencies || {};

// Setup the script rules
appPackage.scripts = {};
['start', 'build', 'eject', 'test'].forEach(function(command) {
appPackage.scripts[command] = 'react-scripts ' + command;
});
appPackage.scripts = {
'start': 'react-scripts start',
'build': 'react-scripts build',
'test': 'react-scripts test --watch --env=jsdom',
'eject': 'react-scripts eject'
};

// explicitly specify ESLint config path for editor plugins
appPackage.eslintConfig = {
Expand Down Expand Up @@ -69,7 +71,6 @@ module.exports = function(appPath, appName, verbose, originalDirectory) {
'install',
'react',
'react-dom',
'react-test-renderer',
'--save',
verbose && '--verbose'
].filter(function(e) { return e; });
Expand Down
7 changes: 4 additions & 3 deletions scripts/test.js
Original file line number Diff line number Diff line change
Expand Up @@ -16,9 +16,10 @@ const paths = require('../config/paths');

const argv = process.argv.slice(2);

const index = argv.indexOf('--debug-template');
if (index !== -1) {
argv.splice(index, 1);
// Don't pass this option to Jest
const debugTemplateIndex = argv.indexOf('--debug-template');
if (debugTemplateIndex !== -1) {
argv.splice(debugTemplateIndex, 1);
}

argv.push('--config', JSON.stringify(createJestConfig(
Expand Down
17 changes: 3 additions & 14 deletions scripts/utils/createJestConfig.js
Original file line number Diff line number Diff line change
Expand Up @@ -9,25 +9,14 @@

module.exports = (resolve, rootDir) => {
const config = {
automock: false,
moduleNameMapper: {
'^[./a-zA-Z0-9$_-]+\\.(jpg|png|gif|eot|otf|webp|svg|ttf|woff|woff2|mp4|webm)$': resolve('config/jest/FileStub.js'),
'^[./a-zA-Z0-9$_-]+\\.css$': resolve('config/jest/CSSStub.js')
},
persistModuleRegistryBetweenSpecs: true,
scriptPreprocessor: resolve('config/jest/transform.js'),
setupFiles: [
resolve('config/polyfills.js')
],
setupTestFrameworkScriptFile: resolve('config/jest/environment.js'),
testPathIgnorePatterns: ['<rootDir>/node_modules/', '<rootDir>/build/'],
// Allow three popular conventions:
// **/__tests__/*.js
// **/*.test.js
// **/*.spec.js
testRegex: '(__tests__/.*|\\.(test|spec))\\.js$',
testEnvironment: 'node',
verbose: true
setupFiles: [resolve('config/polyfills.js')],
testPathIgnorePatterns: ['<rootDir>/(build|docs|node_modules)/'],
testEnvironment: 'node'
};
if (rootDir) {
config.rootDir = rootDir;
Expand Down
32 changes: 18 additions & 14 deletions tasks/e2e.sh
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,8 @@ cd "$(dirname "$0")"
function cleanup {
echo 'Cleaning up.'
cd $initial_path
rm ../template/src/__tests__/__snapshots__/App-test.js.snap
# Uncomment when snapshot testing is enabled by default:
# rm ../template/src/__snapshots__/App.test.js.snap
rm -rf $temp_cli_path $temp_app_path
}

Expand Down Expand Up @@ -53,12 +54,9 @@ perl -i -p0e 's/bundledDependencies.*?]/bundledDependencies": []/s' package.json
npm install
scripts_path=$PWD/`npm pack`

# lint
# Lint
./node_modules/.bin/eslint --ignore-path .gitignore ./

# Test local start command
npm start -- --smoke-test

# Test local build command
npm run build

Expand All @@ -69,9 +67,13 @@ test -e build/static/css/*.css
test -e build/static/media/*.svg
test -e build/favicon.ico

# Run tests
npm run test
test -e template/src/__tests__/__snapshots__/App-test.js.snap
# Run tests, overriding watch option to disable it
npm test -- --watch=no
# Uncomment when snapshot testing is enabled by default:
# test -e template/src/__snapshots__/App.test.js.snap

# Test local start command
npm start -- --smoke-test

# Pack CLI
cd global-cli
Expand Down Expand Up @@ -99,9 +101,10 @@ test -e build/static/css/*.css
test -e build/static/media/*.svg
test -e build/favicon.ico

# Run tests
npm run test
test -e src/__tests__/__snapshots__/App-test.js.snap
# Run tests, overriding watch option to disable it
npm test -- --watch=no
# Uncomment when snapshot testing is enabled by default:
# test -e src/__snapshots__/App.test.js.snap

# Test the server
npm start -- --smoke-test
Expand All @@ -117,9 +120,10 @@ test -e build/static/css/*.css
test -e build/static/media/*.svg
test -e build/favicon.ico

# Run tests
npm run test
test -e src/__tests__/__snapshots__/App-test.js.snap
# Run tests, overriding watch option to disable it
npm test -- --watch=no
# Uncomment when snapshot testing is enabled by default:
# test -e src/__snapshots__/App.test.js.snap

# Test the server
npm start -- --smoke-test
Expand Down
10 changes: 10 additions & 0 deletions template/src/App.test.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
import React from 'react';
import ReactDOM from 'react-dom';
import App from './App';

describe('App', () => {
it('renders without crashing', () => {
const div = document.createElement('div');
ReactDOM.render(<App />, div);
});
});
11 changes: 0 additions & 11 deletions template/src/__tests__/App-test.js

This file was deleted.

0 comments on commit 840ad29

Please sign in to comment.