diff --git a/test/fixtures/extending-eslint-javscript/.env b/test/fixtures/extending-eslint-javscript/.env
new file mode 100644
index 00000000000..3ccb8fff3ef
--- /dev/null
+++ b/test/fixtures/extending-eslint-javscript/.env
@@ -0,0 +1 @@
+EXTEND_ESLINT=true
\ No newline at end of file
diff --git a/test/fixtures/extending-eslint-javscript/extend-eslint-config.js b/test/fixtures/extending-eslint-javscript/extend-eslint-config.js
new file mode 100644
index 00000000000..f2a2ba4aee7
--- /dev/null
+++ b/test/fixtures/extending-eslint-javscript/extend-eslint-config.js
@@ -0,0 +1,5 @@
+module.exports = {
+ rules: {
+ 'no-useless-constructor': 'error',
+ },
+};
diff --git a/test/fixtures/extending-eslint-javscript/index.test.js b/test/fixtures/extending-eslint-javscript/index.test.js
new file mode 100644
index 00000000000..8ba2eb8f562
--- /dev/null
+++ b/test/fixtures/extending-eslint-javscript/index.test.js
@@ -0,0 +1,11 @@
+const testSetup = require('../__shared__/test-setup');
+
+test('extended eslint error should break the development', async () => {
+ const { fulfilled } = await testSetup.scripts.start({ smoke: true });
+ expect(fulfilled).toBe(false);
+});
+
+test('extended eslint error should break the build in production', async () => {
+ const { fulfilled } = await testSetup.scripts.build();
+ expect(fulfilled).toBe(false);
+});
diff --git a/test/fixtures/extending-eslint-javscript/package.json b/test/fixtures/extending-eslint-javscript/package.json
new file mode 100644
index 00000000000..a71fc565b45
--- /dev/null
+++ b/test/fixtures/extending-eslint-javscript/package.json
@@ -0,0 +1,22 @@
+{
+ "eslintConfig": {
+ "extends": [
+ "react-app",
+ "./extend-eslint-config.js"
+ ]
+ },
+ "dependencies": {
+ "react": "latest",
+ "react-dom": "latest",
+ "eslint-config-react-app": "latest",
+ "@typescript-eslint/eslint-plugin": "2.x",
+ "@typescript-eslint/parser": "2.x",
+ "babel-eslint": "10.x",
+ "eslint": "6.x",
+ "eslint-plugin-flowtype": "3.x",
+ "eslint-plugin-import": "2.x",
+ "eslint-plugin-jsx-a11y": "6.x",
+ "eslint-plugin-react": "7.x",
+ "eslint-plugin-react-hooks": "1.x"
+ }
+}
\ No newline at end of file
diff --git a/test/fixtures/extending-eslint-javscript/src/App.js b/test/fixtures/extending-eslint-javscript/src/App.js
new file mode 100644
index 00000000000..014529b3979
--- /dev/null
+++ b/test/fixtures/extending-eslint-javscript/src/App.js
@@ -0,0 +1,14 @@
+import React, { Component } from 'react';
+
+class App extends Component {
+ // Should cause the build to fail due to extended eslint rule change
+ constructor(props) {
+ super(props);
+ }
+
+ render() {
+ return
Hello
;
+ }
+}
+
+export default App;
diff --git a/test/fixtures/extending-eslint-javscript/src/index.js b/test/fixtures/extending-eslint-javscript/src/index.js
new file mode 100644
index 00000000000..b597a44232c
--- /dev/null
+++ b/test/fixtures/extending-eslint-javscript/src/index.js
@@ -0,0 +1,5 @@
+import React from 'react';
+import ReactDOM from 'react-dom';
+import App from './App';
+
+ReactDOM.render(, document.getElementById('root'));
diff --git a/test/fixtures/extending-eslint-typescript/index.test.js b/test/fixtures/extending-eslint-typescript/index.test.js
new file mode 100644
index 00000000000..fe5a94870e8
--- /dev/null
+++ b/test/fixtures/extending-eslint-typescript/index.test.js
@@ -0,0 +1,10 @@
+const testSetup = require('../__shared__/test-setup');
+
+test('extending eslint typescript in development', async () => {
+ const { fulfilled } = await testSetup.scripts.start({ smoke: true });
+ expect(fulfilled).toBe(false);
+});
+test('extending eslint typescript in production', async () => {
+ const { fulfilled } = await testSetup.scripts.build();
+ expect(fulfilled).toBe(false);
+});
diff --git a/test/fixtures/extending-eslint-typescript/package.json b/test/fixtures/extending-eslint-typescript/package.json
new file mode 100644
index 00000000000..39aae868b83
--- /dev/null
+++ b/test/fixtures/extending-eslint-typescript/package.json
@@ -0,0 +1,32 @@
+{
+ "eslintConfig": {
+ "overrides": [
+ {
+ "files": [
+ "**/*.ts?(x)"
+ ],
+ "rules": {
+ "@typescript-eslint/no-useless-constructor'": "error"
+ }
+ }
+ ]
+ },
+ "dependencies": {
+ "typescript": "3.1.3",
+ "@types/react": "*",
+ "@types/react-dom": "*",
+ "@types/jest": "*",
+ "react": "*",
+ "react-dom": "*",
+ "eslint-config-react-app": "latest",
+ "@typescript-eslint/eslint-plugin": "2.x",
+ "@typescript-eslint/parser": "2.x",
+ "babel-eslint": "10.x",
+ "eslint": "6.x",
+ "eslint-plugin-flowtype": "3.x",
+ "eslint-plugin-import": "2.x",
+ "eslint-plugin-jsx-a11y": "6.x",
+ "eslint-plugin-react": "7.x",
+ "eslint-plugin-react-hooks": "1.x"
+ }
+}
\ No newline at end of file
diff --git a/test/fixtures/extending-eslint-typescript/src/App.tsx b/test/fixtures/extending-eslint-typescript/src/App.tsx
new file mode 100644
index 00000000000..b363999c8f4
--- /dev/null
+++ b/test/fixtures/extending-eslint-typescript/src/App.tsx
@@ -0,0 +1,14 @@
+import * as React from 'react';
+
+
+class App extends React.Component {
+ constructor(props:any) {
+ super(props)
+ }
+
+ render() {
+ return ;
+ }
+}
+
+export default App;
diff --git a/test/fixtures/extending-eslint-typescript/src/index.tsx b/test/fixtures/extending-eslint-typescript/src/index.tsx
new file mode 100644
index 00000000000..bea6ed52237
--- /dev/null
+++ b/test/fixtures/extending-eslint-typescript/src/index.tsx
@@ -0,0 +1,5 @@
+import * as React from 'react';
+import * as ReactDOM from 'react-dom';
+import App from './App';
+
+ReactDOM.render(, document.getElementById('root'));