UNPKG

2.82 kBJavaScriptView Raw
1/* eslint-disable jest/no-jest-import */
2/* eslint-disable global-require */
3/* eslint-disable import/no-dynamic-require */
4// https://github.com/facebookincubator/create-react-app/blob/master/packages/react-scripts/utils/createJestConfig.js
5const path = require('path');
6
7// https://github.com/facebook/jest/issues/7704#issuecomment-458552963
8require('jest/node_modules/jest-cli/build/cli');
9
10const jest = require('jest');
11const { existsSync } = require('fs');
12
13function create(settings) {
14 settings.init();
15 const rootDir = settings.project();
16 const jestInitExists = existsSync(`${path.join(settings.app(), 'jest.init.js')}`);
17
18 const setupFilesPath = path.join(settings.project(), 'jest.setup.js');
19 const setupFilesExist = existsSync(setupFilesPath);
20
21 const setupFiles = setupFilesExist ? [`${require.resolve(setupFilesPath)}`] : [];
22
23 // Allow developers to add their own node_modules include path
24 const userInclude = settings.configuration.development.babelInclude;
25 const includes = ['@av', ...userInclude].join('|');
26
27 const config = {
28 collectCoverageFrom: ['project/app/**/*.{js,jsx}'],
29 coveragePathIgnorePatterns: ['/node_modules/', '/coverage/', '/dist/'],
30 testEnvironment: 'node',
31 testURL: 'http://localhost',
32 transform: {
33 '^.+\\.(js|jsx)$': `${require.resolve('./jest/babel.js')}`,
34 '^.+\\.css$': `${require.resolve('./jest/css.js')}`,
35 '^(?!.*\\.(js|jsx|css|json)$)': `${require.resolve('./jest/file.js')}`
36 },
37 setupFiles: [require.resolve('raf/polyfill'), ...setupFiles],
38 setupFilesAfterEnv: jestInitExists
39 ? require(path.join(settings.app(), 'jest.init.js'))
40 : ['jest-dom/extend-expect', '@testing-library/react/cleanup-after-each'],
41 transformIgnorePatterns: [`[/\\\\]node_modules[/\\\\](?!(${includes})).+\\.(js|jsx)$`],
42 testMatch: [
43 // Ignore the following directories:
44 // build
45 // - the build output directory
46 // .cache
47 // - the yarn module cache on Ubuntu if $HOME === rootDir
48 // docs
49 // - often used to publish to Github Pages
50 // node_modules
51 // - ignore tests in dependencies
52 // dist
53 // - the dist output directory
54 '<rootDir>/!(build|docs|dist|node_modules|scripts)/**/__tests__/**/*.js?(x)',
55 '<rootDir>/!(build|docs|dist|node_modules|scripts)/**/?(*.)(spec|test).js?(x)'
56 ],
57 globals: settings.globals()
58 };
59
60 if (rootDir) {
61 config.rootDir = rootDir;
62 }
63
64 return config;
65}
66
67function unit(settings) {
68 const argv = process.argv.slice(2);
69 const jestConfig = JSON.stringify(create(settings));
70 argv.push(`--config=${jestConfig}`);
71 argv.push('--env=jsdom');
72
73 jest.run(argv);
74
75 return Promise.resolve();
76}
77
78module.exports = settings => ({
79 run: () => unit(settings),
80 description: 'Run your tests using Jest'
81});