diff --git a/packages/eslint-config-react-app/index.js b/packages/eslint-config-react-app/index.js index 5e5825e99ef..c9c517c562c 100644 --- a/packages/eslint-config-react-app/index.js +++ b/packages/eslint-config-react-app/index.js @@ -112,6 +112,17 @@ module.exports = { '@typescript-eslint/no-useless-constructor': 'warn', }, }, + { + files: [ + '**/__tests__/**/*.{js,jsx,ts,tsx}', + '**/*.{spec,test}.{js,jsx,ts,tsx}', + ], + extends: [ + 'plugin:jest/recommended', + 'plugin:jest-dom/recommended', + 'plugin:testing-library/react', + ], + }, ], // NOTE: When adding rules here, you need to make sure they are compatible with diff --git a/packages/eslint-config-react-app/package.json b/packages/eslint-config-react-app/package.json index bc92bac2c75..6a158f12fe6 100644 --- a/packages/eslint-config-react-app/package.json +++ b/packages/eslint-config-react-app/package.json @@ -21,9 +21,12 @@ "eslint": "6.x", "eslint-plugin-flowtype": "3.x || 4.x", "eslint-plugin-import": "2.x", + "eslint-plugin-jest": "23.x", + "eslint-plugin-jest-dom": "2.x", "eslint-plugin-jsx-a11y": "6.x", "eslint-plugin-react": "7.x", - "eslint-plugin-react-hooks": "1.x || 2.x || 3.x || 4.x" + "eslint-plugin-react-hooks": "1.x || 2.x || 3.x || 4.x", + "eslint-plugin-testing-library": "2.x" }, "dependencies": { "confusing-browser-globals": "^1.0.9" diff --git a/packages/react-error-overlay/src/__tests__/extract-source-map.js b/packages/react-error-overlay/src/__tests__/extract-source-map.js index b47f5ab5f6d..43ca2c3e0fe 100644 --- a/packages/react-error-overlay/src/__tests__/extract-source-map.js +++ b/packages/react-error-overlay/src/__tests__/extract-source-map.js @@ -16,15 +16,8 @@ test('extracts last source map directive', async () => { }); test('errors when no source map', async () => { - expect.assertions(1); - const testFileName = 'test.js'; - try { - await extractSourceMapUrl( - testFileName, - `console.log('hi')\n\nconsole.log('bye')` - ); - } catch (e) { - expect(e).toBe(`Cannot find a source map directive for ${testFileName}.`); - } + await expect( + extractSourceMapUrl(testFileName, `console.log('hi')\n\nconsole.log('bye')`) + ).rejects.toBe(`Cannot find a source map directive for ${testFileName}.`); }); diff --git a/packages/react-error-overlay/src/__tests__/get-source-map.js b/packages/react-error-overlay/src/__tests__/get-source-map.js index 27c6d5f7893..89588691e8f 100644 --- a/packages/react-error-overlay/src/__tests__/get-source-map.js +++ b/packages/react-error-overlay/src/__tests__/get-source-map.js @@ -47,17 +47,10 @@ test('find an inline source map', async () => { }); test('error on a source map with unsupported encoding', async () => { - expect.assertions(2); - const file = fs .readFileSync(resolve(__dirname, '../../fixtures/junk-inline.mjs')) .toString('utf8'); - try { - await getSourceMap('/', file); - } catch (e) { - expect(e instanceof Error).toBe(true); - expect(e.message).toBe( - 'Sorry, non-base64 inline source-map encoding is not supported.' - ); - } + await expect(getSourceMap('/', file)).rejects.toThrow( + new Error('Sorry, non-base64 inline source-map encoding is not supported.') + ); }); diff --git a/packages/react-error-overlay/src/__tests__/parser/generic.js b/packages/react-error-overlay/src/__tests__/parser/generic.js index 32bade9311f..3cc11e3a544 100644 --- a/packages/react-error-overlay/src/__tests__/parser/generic.js +++ b/packages/react-error-overlay/src/__tests__/parser/generic.js @@ -8,23 +8,13 @@ import { parse } from '../../utils/parser'; test('throws on null', () => { - expect.assertions(2); - try { - parse(null); - } catch (e) { - expect(e instanceof Error).toBe(true); - expect(e.message).toBe('You cannot pass a null object.'); - } + expect(() => parse(null)).toThrow( + new Error('You cannot pass a null object.') + ); }); test('throws on unparsable', () => { - expect.assertions(2); - try { - parse({}); - } catch (e) { - expect(e instanceof Error).toBe(true); - expect(e.message).toBe( - 'The error you provided does not contain a stack trace.' - ); - } + expect(() => parse({})).toThrow( + new Error('The error you provided does not contain a stack trace.') + ); }); diff --git a/packages/react-scripts/package.json b/packages/react-scripts/package.json index b29936753df..1bdef4b2707 100644 --- a/packages/react-scripts/package.json +++ b/packages/react-scripts/package.json @@ -49,9 +49,12 @@ "eslint-loader": "4.0.2", "eslint-plugin-flowtype": "4.7.0", "eslint-plugin-import": "2.20.2", + "eslint-plugin-jest": "23.6.0", + "eslint-plugin-jest-dom": "2.0.0", "eslint-plugin-jsx-a11y": "6.2.3", "eslint-plugin-react": "7.20.0", "eslint-plugin-react-hooks": "^4.0.0", + "eslint-plugin-testing-library": "2.2.1", "file-loader": "6.0.0", "fs-extra": "^9.0.0", "html-webpack-plugin": "4.3.0",