diff --git a/e2e-tests/development-runtime/.eslintignore b/e2e-tests/development-runtime/.eslintignore new file mode 100644 index 0000000000000..8a51cd1377973 --- /dev/null +++ b/e2e-tests/development-runtime/.eslintignore @@ -0,0 +1,2 @@ +src/pages/anonymous-arrow.js +src/pages/anonymous-arrow-two.js diff --git a/e2e-tests/development-runtime/cypress/integration/eslint-rules/limited-exports-page-templates.js b/e2e-tests/development-runtime/cypress/integration/eslint-rules/limited-exports-page-templates.js index fa86741f6bd91..accc4d9b40222 100644 --- a/e2e-tests/development-runtime/cypress/integration/eslint-rules/limited-exports-page-templates.js +++ b/e2e-tests/development-runtime/cypress/integration/eslint-rules/limited-exports-page-templates.js @@ -1,16 +1,44 @@ +before(() => { + cy.exec( + `npm run update -- --file src/pages/eslint-rules/limited-exports-page-templates.js --restore` + ) +}) + +after(() => { + cy.exec( + `npm run update -- --file src/pages/eslint-rules/limited-exports-page-templates.js --restore` + ) +}) + +const errorPlaceholder = `// export function notAllowed() {}` +const errorReplacement = `export function notAllowed() {}` + describe(`limited-exports-page-templates`, () => { - it(`should log warning to console for invalid export`, () => { + beforeEach(() => { cy.visit( `/eslint-rules/limited-exports-page-templates` ).waitForRouteChange() + }) + + it(`should initially not log to console`, () => { + cy.get(`@hmrConsoleLog`).should( + `not.be.calledWithMatch`, + /13:1 {2}warning {2}In page templates only a default export of a valid React component and the named export of a page query is allowed./i + ) + }) + it(`should log warning to console for invalid export`, () => { + cy.exec( + `npm run update -- --file src/pages/eslint-rules/limited-exports-page-templates.js --replacements "${errorPlaceholder}:${errorReplacement}" --exact` + ) + cy.reload() cy.get(`@hmrConsoleLog`).should( `be.calledWithMatch`, - /15:1 warning In page templates only a default export of a valid React component and the named export of a page query is allowed./i + /13:1 {2}warning {2}In page templates only a default export of a valid React component and the named export of a page query is allowed./i ) cy.get(`@hmrConsoleLog`).should( `not.be.calledWithMatch`, - /17:1 warning In page templates only a default export of a valid React component and the named export of a page query is allowed./i + /15:1 {2}warning {2}In page templates only a default export of a valid React component and the named export of a page query is allowed./i ) }) }) diff --git a/e2e-tests/development-runtime/cypress/integration/eslint-rules/no-anonymous-exports-page-templates.js b/e2e-tests/development-runtime/cypress/integration/eslint-rules/no-anonymous-exports-page-templates.js index 2772841ff9a48..0aefb8f56a9cb 100644 --- a/e2e-tests/development-runtime/cypress/integration/eslint-rules/no-anonymous-exports-page-templates.js +++ b/e2e-tests/development-runtime/cypress/integration/eslint-rules/no-anonymous-exports-page-templates.js @@ -1,9 +1,53 @@ +before(() => { + cy.exec( + `npm run update -- --file src/pages/eslint-rules/no-anonymous-exports-page-templates.js --restore` + ) + cy.exec( + `npm run update -- --file src/pages/eslint-rules/no-anonymous-exports-page-templates-function.js --restore` + ) +}) + +after(() => { + cy.exec( + `npm run update -- --file src/pages/eslint-rules/no-anonymous-exports-page-templates.js --restore` + ) + cy.exec( + `npm run update -- --file src/pages/eslint-rules/no-anonymous-exports-page-templates-function.js --restore` + ) +}) + +const errorPlaceholderAnonExport01 = `const Named = () =>` +const errorReplacementAnonExport01 = `export default () =>` +const errorPlaceholderAnonExport02 = `export default Named` +const errorReplacementAnonExport02 = `// named-default-export` +const errorPlaceholderAnonFunction = `export default function Named()` +const errorReplacementAnonFunction = `export default function ()` + describe(`no-anonymous-exports-page-templates`, () => { + it(`should initially not log to console`, () => { + cy.visit( + `/eslint-rules/no-anonymous-exports-page-templates` + ).waitForRouteChange() + cy.get(`@hmrConsoleLog`).should( + `not.be.calledWithMatch`, + /Anonymous arrow functions cause Fast Refresh to not preserve local component state./i + ) + cy.get(`@hmrConsoleLog`).should( + `not.be.calledWithMatch`, + /Anonymous function declarations cause Fast Refresh to not preserve local component state./i + ) + }) it(`should log warning to console for arrow functions`, () => { cy.visit( `/eslint-rules/no-anonymous-exports-page-templates` ).waitForRouteChange() + cy.exec( + `npm run update -- --file src/pages/eslint-rules/no-anonymous-exports-page-templates.js --replacements "${errorPlaceholderAnonExport01}:${errorReplacementAnonExport01}" --replacements "${errorPlaceholderAnonExport02}:${errorReplacementAnonExport02}" --exact` + ) + + cy.reload() + cy.get(`@hmrConsoleLog`).should( `be.calledWithMatch`, /Anonymous arrow functions cause Fast Refresh to not preserve local component state./i @@ -14,6 +58,12 @@ describe(`no-anonymous-exports-page-templates`, () => { `/eslint-rules/no-anonymous-exports-page-templates-function` ).waitForRouteChange() + cy.exec( + `npm run update -- --file src/pages/eslint-rules/no-anonymous-exports-page-templates-function.js --replacements "${errorPlaceholderAnonFunction}:${errorReplacementAnonFunction}" --exact` + ) + + cy.reload() + cy.get(`@hmrConsoleLog`).should( `be.calledWithMatch`, /Anonymous function declarations cause Fast Refresh to not preserve local component state./i diff --git a/e2e-tests/development-runtime/src/pages/eslint-rules/limited-exports-page-templates.js b/e2e-tests/development-runtime/src/pages/eslint-rules/limited-exports-page-templates.js index 75a40504bb908..2234ea7049c41 100644 --- a/e2e-tests/development-runtime/src/pages/eslint-rules/limited-exports-page-templates.js +++ b/e2e-tests/development-runtime/src/pages/eslint-rules/limited-exports-page-templates.js @@ -5,14 +5,12 @@ function PageQuery({ data }) { return (

Limited Exports Page Templates. ESLint Rule

-

- {data.site.siteMetadata.title} -

+

{data.site.siteMetadata.title}

) } -export function notAllowed() {} +// export function notAllowed() {} export const query = graphql` { diff --git a/e2e-tests/development-runtime/src/pages/eslint-rules/no-anonymous-exports-page-templates-function.js b/e2e-tests/development-runtime/src/pages/eslint-rules/no-anonymous-exports-page-templates-function.js index e7ef2e9fbd5a1..67734e9314153 100644 --- a/e2e-tests/development-runtime/src/pages/eslint-rules/no-anonymous-exports-page-templates-function.js +++ b/e2e-tests/development-runtime/src/pages/eslint-rules/no-anonymous-exports-page-templates-function.js @@ -2,7 +2,7 @@ import React from "react" import Layout from "../../components/layout" -export default function () { +export default function Named() { return (

Anonymous Arrow Function. ESLint Rule

diff --git a/e2e-tests/development-runtime/src/pages/eslint-rules/no-anonymous-exports-page-templates.js b/e2e-tests/development-runtime/src/pages/eslint-rules/no-anonymous-exports-page-templates.js index 4378c7bbcb324..3871780d0a40c 100644 --- a/e2e-tests/development-runtime/src/pages/eslint-rules/no-anonymous-exports-page-templates.js +++ b/e2e-tests/development-runtime/src/pages/eslint-rules/no-anonymous-exports-page-templates.js @@ -2,8 +2,10 @@ import React from "react" import Layout from "../../components/layout" -export default () => ( +const Named = () => (

Anonymous Arrow Function. ESLint Rule

) + +export default Named