From 81e69e8662e5d4010b1ca726092479f777b0e4d7 Mon Sep 17 00:00:00 2001 From: Houssein Djirdeh Date: Wed, 18 May 2022 14:36:11 -0400 Subject: [PATCH] Fixes `beforeInteractive` scripts failing in custom document (#37000) - Fixes #36997 - Fixes #31275 @janicklas-ralph Any idea why tests were passing while this check was failing? Can we add a stronger test for this? --- packages/next/build/webpack-config.ts | 2 +- .../index.test.ts | 63 +++++++++++++++++++ 2 files changed, 64 insertions(+), 1 deletion(-) rename test/e2e/{next-script-worker-strategy => next-script}/index.test.ts (85%) diff --git a/packages/next/build/webpack-config.ts b/packages/next/build/webpack-config.ts index eb2c76523fe69..597dbe9bcfd01 100644 --- a/packages/next/build/webpack-config.ts +++ b/packages/next/build/webpack-config.ts @@ -816,7 +816,7 @@ export default async function getBaseWebpackConfig( } const notExternalModules = - /^(?:private-next-pages\/|next\/(?:dist\/pages\/|(?:app|document|link|image|constants|dynamic)$)|string-hash$)/ + /^(?:private-next-pages\/|next\/(?:dist\/pages\/|(?:app|document|link|image|constants|dynamic|script)$)|string-hash$)/ if (notExternalModules.test(request)) { return } diff --git a/test/e2e/next-script-worker-strategy/index.test.ts b/test/e2e/next-script/index.test.ts similarity index 85% rename from test/e2e/next-script-worker-strategy/index.test.ts rename to test/e2e/next-script/index.test.ts index ebbfbac28b374..6e37026d104e4 100644 --- a/test/e2e/next-script-worker-strategy/index.test.ts +++ b/test/e2e/next-script/index.test.ts @@ -4,6 +4,69 @@ import { NextInstance } from 'test/lib/next-modes/base' import { BrowserInterface } from 'test/lib/browsers/base' import { waitFor } from 'next-test-utils' +describe('beforeInteractive', () => { + let next: NextInstance + + beforeAll(async () => { + next = await createNext({ + files: { + 'pages/_document.js': ` + import { Html, Head, Main, NextScript } from 'next/document' + import Script from 'next/script' + + export default function Document() { + return ( + + + + + +
+ + + + ) + } + `, + 'pages/index.js': ` + import Script from 'next/script' + + export default function Home() { + return ( + <> +

Home page

+ + ) + } + `, + }, + dependencies: { + react: '17.0.2', + 'react-dom': '17.0.2', + }, + }) + }) + afterAll(() => next.destroy()) + + it('Script is injected server-side', async () => { + let browser: BrowserInterface + + try { + browser = await webdriver(next.url, '/') + + const script = await browser.eval( + `document.querySelector('script[data-nscript="beforeInteractive"]')` + ) + expect(script).not.toBeNull() + } finally { + if (browser) await browser.close() + } + }) +}) + describe('experimental.nextScriptWorkers: false with no Partytown dependency', () => { let next: NextInstance