Skip to content

Instantly share code, notes, and snippets.

@colbycheeze
Last active April 15, 2017 13:55
Show Gist options
  • Save colbycheeze/6a88f9d62fe742f13fdfae5f88c8981e to your computer and use it in GitHub Desktop.
Save colbycheeze/6a88f9d62fe742f13fdfae5f88c8981e to your computer and use it in GitHub Desktop.
A robust jest setup used in a large project
{
"presets": [ "react", ["es2015", {"modules": false}], "stage-1" ],
"plugins": ["react-hot-loader/babel", "transform-runtime", "lodash"],
"env": {
"test": {
"plugins": ["babel-plugin-dynamic-import-node"],
"presets": ["react", "es2015", "stage-1"],
}
}
}
// config/__mocks__/fileMock.js
module.exports = 'test-file-stub'
// config/jest.js
import { shallow, render, mount } from 'enzyme'
// Helper for setting location in tests requiring access to window.location
export const setPathname = pathname => {
Object.defineProperty(window.location, 'pathname', {
writable: true,
value: pathname,
})
}
// Skip createElement warnings but fail tests on any other warning
console.error = message => {
if (!/(React.createElement: type should not be null)/.test(message)) {
throw new Error(message)
}
}
// Make Enzyme functions available in all test files without importing
global.shallow = shallow
global.render = render
global.mount = mount
const localStorageMock = (function () {
let store = {}
return {
getItem(key) {
return store[key]
},
setItem(key, value) {
store[key] = value.toString()
},
clear() {
store = {}
},
}
}())
Object.defineProperty(window, 'localStorage', { value: localStorageMock })
{
...
},
"scripts": {
"test": "better-npm-run test",
"test:verbose": "yarn test -- --verbose",
"test:watch": "yarn test -- --watch",
"test:coverage": "yarn test -- --maxWorkers 4 --coverage && codecov",
},
"betterScripts": {
"test": {
"command": "jest",
"env": {
"NODE_ENV": "test"
}
},
},
"jest": {
"setupFiles": [
"<rootDir>/config/jest.js"
],
"modulePaths": [
"src"
],
"moduleNameMapper": {
"\\.(jpg|jpeg|png|gif|eot|otf|webp|svg|ttf|woff|woff2|mp4|webm|wav|mp3|m4a|aac|oga)$": "<rootDir>/config/__mocks__/fileMock.js",
"\\.scss$": "identity-obj-proxy"
},
"snapshotSerializers": [
"enzyme-to-json/serializer"
],
"collectCoverageFrom": [
"src/**/*.{js,jsx}",
"!**/index.{js,jsx}",
"!**/*.factory.{js,jsx}",
"!**/factories/**",
"!**/*.story.{js,jsx}",
"!**/stories/**",
"!**/node_modules/**",
"!**/vendor/**",
"!/src/routes/groups/**"
],
"globals": {
"__DEV__": false,
"__PROD__": false,
"__TEST__": true,
"__DEBUG__": false,
"__API_ROOT__": "/",
"__GA_TRACKING_ID__": ""
}
},
"devDependencies": {
"babel-jest": "^18.0.0",
"babel-loader": "^6.2.10",
"babel-plugin-dynamic-import-node": "^1.0.0",
"babel-plugin-syntax-dynamic-import": "^6.18.0",
"babel-plugin-transform-runtime": "^6.15.0",
"babel-preset-es2015": "^6.5.0",
"babel-preset-react": "^6.5.0",
"babel-preset-react-optimize": "^1.0.1",
"babel-preset-stage-1": "^6.16.0",
"babel-register": "^6.7.2",
"babel-resolver": "0.0.18",
"better-npm-run": "0.0.13",
"codecov": "^1.0.1",
"enzyme": "^2.7.0",
"enzyme-to-json": "^1.4.5",
"identity-obj-proxy": "^3.0.0",
"jest": "^18.1.0",
"react-addons-test-utils": "^15.4.2",
},
...
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment