From 054796b38797c0701b378e1324d80abe25c6d750 Mon Sep 17 00:00:00 2001 From: Katie Byers Date: Mon, 14 Nov 2022 23:09:25 -0800 Subject: [PATCH] fix tests for injection into entrypoints --- packages/nextjs/test/config/fixtures.ts | 11 +++-- .../webpack/constructWebpackConfig.test.ts | 47 +++++++++++-------- 2 files changed, 36 insertions(+), 22 deletions(-) diff --git a/packages/nextjs/test/config/fixtures.ts b/packages/nextjs/test/config/fixtures.ts index 3e9542d85a95..be1d06a696d6 100644 --- a/packages/nextjs/test/config/fixtures.ts +++ b/packages/nextjs/test/config/fixtures.ts @@ -41,11 +41,12 @@ export const serverWebpackConfig: WebpackConfigObject = { entry: () => Promise.resolve({ 'pages/_error': 'private-next-pages/_error.js', - 'pages/_app': ['./node_modules/smellOVision/index.js', 'private-next-pages/_app.js'], + 'pages/_app': 'private-next-pages/_app.js', + 'pages/sniffTour': ['./node_modules/smellOVision/index.js', 'private-next-pages/sniffTour.js'], 'pages/api/_middleware': 'private-next-pages/api/_middleware.js', 'pages/api/simulator/dogStats/[name]': { import: 'private-next-pages/api/simulator/dogStats/[name].js' }, - 'pages/api/simulator/leaderboard': { - import: ['./node_modules/dogPoints/converter.js', 'private-next-pages/api/simulator/leaderboard.js'], + 'pages/simulator/leaderboard': { + import: ['./node_modules/dogPoints/converter.js', 'private-next-pages/simulator/leaderboard.js'], }, 'pages/api/tricks/[trickName]': { import: 'private-next-pages/api/tricks/[trickName].js', @@ -64,6 +65,10 @@ export const clientWebpackConfig: WebpackConfigObject = { main: './src/index.ts', 'pages/_app': 'next-client-pages-loader?page=%2F_app', 'pages/_error': 'next-client-pages-loader?page=%2F_error', + 'pages/sniffTour': ['./node_modules/smellOVision/index.js', 'private-next-pages/sniffTour.js'], + 'pages/simulator/leaderboard': { + import: ['./node_modules/dogPoints/converter.js', 'private-next-pages/simulator/leaderboard.js'], + }, }), output: { filename: 'static/chunks/[name].js', path: '/Users/Maisey/projects/squirrelChasingSimulator/.next' }, target: 'web', diff --git a/packages/nextjs/test/config/webpack/constructWebpackConfig.test.ts b/packages/nextjs/test/config/webpack/constructWebpackConfig.test.ts index 20883103a5e6..0646c00e0c9b 100644 --- a/packages/nextjs/test/config/webpack/constructWebpackConfig.test.ts +++ b/packages/nextjs/test/config/webpack/constructWebpackConfig.test.ts @@ -102,8 +102,12 @@ describe('constructWebpackConfigFunction()', () => { 'pages/_error': [serverConfigFilePath, 'private-next-pages/_error.js'], // original entrypoint value is a string array - // (was ['./node_modules/smellOVision/index.js', 'private-next-pages/_app.js']) - 'pages/_app': [serverConfigFilePath, './node_modules/smellOVision/index.js', 'private-next-pages/_app.js'], + // (was ['./node_modules/smellOVision/index.js', 'private-next-pages/sniffTour.js']) + 'pages/sniffTour': [ + serverConfigFilePath, + './node_modules/smellOVision/index.js', + 'private-next-pages/sniffTour.js', + ], // original entrypoint value is an object containing a string `import` value // (was { import: 'private-next-pages/api/simulator/dogStats/[name].js' }) @@ -112,12 +116,12 @@ describe('constructWebpackConfigFunction()', () => { }, // original entrypoint value is an object containing a string array `import` value - // (was { import: ['./node_modules/dogPoints/converter.js', 'private-next-pages/api/simulator/leaderboard.js'] }) - 'pages/api/simulator/leaderboard': { + // (was { import: ['./node_modules/dogPoints/converter.js', 'private-next-pages/simulator/leaderboard.js'] }) + 'pages/simulator/leaderboard': { import: [ serverConfigFilePath, './node_modules/dogPoints/converter.js', - 'private-next-pages/api/simulator/leaderboard.js', + 'private-next-pages/simulator/leaderboard.js', ], }, @@ -131,7 +135,7 @@ describe('constructWebpackConfigFunction()', () => { ); }); - it('injects user config file into `_app` in both server and client bundles', async () => { + it('injects user config file into `_app` in client bundle but not in server bundle', async () => { const finalServerWebpackConfig = await materializeFinalWebpackConfig({ exportedNextConfig, incomingWebpackConfig: serverWebpackConfig, @@ -145,7 +149,7 @@ describe('constructWebpackConfigFunction()', () => { expect(finalServerWebpackConfig.entry).toEqual( expect.objectContaining({ - 'pages/_app': expect.arrayContaining([serverConfigFilePath]), + 'pages/_app': expect.not.arrayContaining([serverConfigFilePath]), }), ); expect(finalClientWebpackConfig.entry).toEqual( @@ -179,7 +183,7 @@ describe('constructWebpackConfigFunction()', () => { ); }); - it('injects user config file into API routes', async () => { + it('injects user config file into both API routes and non-API routes', async () => { const finalWebpackConfig = await materializeFinalWebpackConfig({ exportedNextConfig, incomingWebpackConfig: serverWebpackConfig, @@ -192,13 +196,13 @@ describe('constructWebpackConfigFunction()', () => { import: expect.arrayContaining([serverConfigFilePath]), }, - 'pages/api/simulator/leaderboard': { - import: expect.arrayContaining([serverConfigFilePath]), - }, - 'pages/api/tricks/[trickName]': expect.objectContaining({ import: expect.arrayContaining([serverConfigFilePath]), }), + + 'pages/simulator/leaderboard': { + import: expect.arrayContaining([serverConfigFilePath]), + }, }), ); }); @@ -218,19 +222,24 @@ describe('constructWebpackConfigFunction()', () => { ); }); - it('does not inject anything into non-_app, non-_error, non-API routes', async () => { + it('does not inject anything into non-_app pages during client build', async () => { const finalWebpackConfig = await materializeFinalWebpackConfig({ exportedNextConfig, incomingWebpackConfig: clientWebpackConfig, incomingWebpackBuildContext: clientBuildContext, }); - expect(finalWebpackConfig.entry).toEqual( - expect.objectContaining({ - // no injected file - main: './src/index.ts', - }), - ); + expect(finalWebpackConfig.entry).toEqual({ + main: './src/index.ts', + // only _app has config file injected + 'pages/_app': [clientConfigFilePath, 'next-client-pages-loader?page=%2F_app'], + 'pages/_error': 'next-client-pages-loader?page=%2F_error', + 'pages/sniffTour': ['./node_modules/smellOVision/index.js', 'private-next-pages/sniffTour.js'], + 'pages/simulator/leaderboard': { + import: ['./node_modules/dogPoints/converter.js', 'private-next-pages/simulator/leaderboard.js'], + }, + simulatorBundle: './src/simulator/index.ts', + }); }); }); });