From 97276ace01417581e781e32a119f5eec2b5d0a86 Mon Sep 17 00:00:00 2001 From: nkzawa Date: Mon, 15 Aug 2022 17:26:37 +0700 Subject: [PATCH 1/5] do not warn message when middleware is removed --- packages/next/server/next-server.ts | 1 - 1 file changed, 1 deletion(-) diff --git a/packages/next/server/next-server.ts b/packages/next/server/next-server.ts index b58ffafead42..f8836a55c4d7 100644 --- a/packages/next/server/next-server.ts +++ b/packages/next/server/next-server.ts @@ -1297,7 +1297,6 @@ export default class NextNodeServer extends BaseServer { return { finished: false } } if (!(await this.hasMiddleware(middleware.page))) { - console.warn(`The Edge Function for ${middleware.page} was not found`) return { finished: false } } From ba0d45a4d0f2a5071df1a019f99f2e5db780e8e3 Mon Sep 17 00:00:00 2001 From: nkzawa Date: Fri, 19 Aug 2022 17:50:07 +0700 Subject: [PATCH 2/5] add tests for middleware file update on dev mode --- .../middleware-dev-update/middleware.js | 7 + .../middleware-dev-update/pages/index.js | 9 ++ .../middleware-dev-update/test/index.test.js | 142 ++++++++++++++++++ 3 files changed, 158 insertions(+) create mode 100644 test/integration/middleware-dev-update/middleware.js create mode 100644 test/integration/middleware-dev-update/pages/index.js create mode 100644 test/integration/middleware-dev-update/test/index.test.js diff --git a/test/integration/middleware-dev-update/middleware.js b/test/integration/middleware-dev-update/middleware.js new file mode 100644 index 000000000000..452c740b97ed --- /dev/null +++ b/test/integration/middleware-dev-update/middleware.js @@ -0,0 +1,7 @@ +import { NextResponse } from 'next/server' + +export function middleware(request) { + const res = NextResponse.rewrite(new URL('/', request.url)) + res.headers.set('X-From-Middleware', 'true') + return res +} diff --git a/test/integration/middleware-dev-update/pages/index.js b/test/integration/middleware-dev-update/pages/index.js new file mode 100644 index 000000000000..c37edc772d0e --- /dev/null +++ b/test/integration/middleware-dev-update/pages/index.js @@ -0,0 +1,9 @@ +export default (props) =>
{props.fromMiddleware}
+ +export async function getServerSideProps({ res }) { + return { + props: { + fromMiddleware: res.getHeader('x-from-middleware') || '', + }, + } +} diff --git a/test/integration/middleware-dev-update/test/index.test.js b/test/integration/middleware-dev-update/test/index.test.js new file mode 100644 index 000000000000..3d9333f13402 --- /dev/null +++ b/test/integration/middleware-dev-update/test/index.test.js @@ -0,0 +1,142 @@ +import { + fetchViaHTTP, + File, + findPort, + killApp, + launchApp, + retry, + waitFor, +} from 'next-test-utils' +import { join } from 'path' +import stripAnsi from 'strip-ansi' +import webdriver from 'next-webdriver' + +const context = { + appDir: join(__dirname, '../'), + logs: { output: '', stdout: '', stderr: '' }, + middleware: new File(join(__dirname, '../middleware.js')), +} + +describe('Middleware development errors', () => { + beforeEach(async () => { + context.logs = { output: '', stdout: '', stderr: '' } + context.appPort = await findPort() + context.app = await launchApp(context.appDir, context.appPort, { + onStdout(msg) { + context.logs.output += msg + context.logs.stdout += msg + }, + onStderr(msg) { + context.logs.output += msg + context.logs.stderr += msg + }, + }) + }) + + afterEach(() => { + context.middleware.restore() + if (context.app) { + killApp(context.app) + } + }) + + async function assertMiddlewareFetch(hasMiddleware, path = '/') { + const res = await fetchViaHTTP(context.appPort, path) + expect(res.status).toBe(200) + expect(res.headers.get('x-from-middleware')).toBe( + hasMiddleware ? 'true' : null + ) + } + + async function assertMiddlewareRender(hasMiddleware, path = '/') { + const browser = await webdriver(context.appPort, path) + const fromMiddleware = await browser.elementById('from-middleware').text() + expect(fromMiddleware).toBe(hasMiddleware ? 'true' : '') + } + + describe('when middleware is removed', () => { + beforeEach(async () => { + await assertMiddlewareFetch(true) + context.middleware.delete() + }) + + it('sends response correctly', async () => { + await assertMiddlewareFetch(false) + + // assert no extra message on stderr + expect(context.logs.stderr).toBe('') + }) + + it('renders correctly', async () => { + await assertMiddlewareRender(false) + }) + }) + + describe('when middleware is removed and re-added', () => { + beforeEach(async () => { + await assertMiddlewareFetch(true) + context.middleware.delete() + await assertMiddlewareFetch(false) + context.middleware.restore() + }) + + it('sends response correctly', async () => { + await assertMiddlewareFetch(true) + }) + + // FIXME: the test passes but an error occurs in browser + it.skip('renders correctly', async () => { + await assertMiddlewareRender(true) + }) + }) + + // FIXME: it does not work since middleware is not called + describe.skip('when middleware is added', () => { + beforeEach(async () => { + context.middleware.delete() + await assertMiddlewareFetch(false) + context.middleware.restore() + }) + + it('sends response correctly', async () => { + await assertMiddlewareFetch(true) + }) + + it('renders correctly', async () => { + await assertMiddlewareRender(true) + }) + }) + + describe('when matcher is added', () => { + beforeEach(async () => { + context.middleware.write( + context.middleware.originalContent + + ` + export const config = { + matcher: '/', + } + ` + ) + + await assertMiddlewareFetch(true) + + context.middleware.write( + context.middleware.originalContent + + ` + export const config = { + matcher: '/asdf', + } + ` + ) + }) + + it('sends response correctly', async () => { + await retry(() => assertMiddlewareFetch(true, '/asdf')) + }) + + // FIXME: the test passes but an error occurs in browser + it.skip('renders correctly', async () => { + await retry(() => assertMiddlewareRender(true, '/asdf')) + }) + }) +}) From 25c43d5e67640bcea1560b4df7098e0e453de564 Mon Sep 17 00:00:00 2001 From: nkzawa Date: Fri, 19 Aug 2022 18:20:00 +0700 Subject: [PATCH 3/5] simplify test --- .../middleware-dev-update/test/index.test.js | 28 ++++++------------- 1 file changed, 9 insertions(+), 19 deletions(-) diff --git a/test/integration/middleware-dev-update/test/index.test.js b/test/integration/middleware-dev-update/test/index.test.js index 3d9333f13402..fe871cb3347d 100644 --- a/test/integration/middleware-dev-update/test/index.test.js +++ b/test/integration/middleware-dev-update/test/index.test.js @@ -62,14 +62,11 @@ describe('Middleware development errors', () => { it('sends response correctly', async () => { await assertMiddlewareFetch(false) + await assertMiddlewareRender(false) // assert no extra message on stderr expect(context.logs.stderr).toBe('') }) - - it('renders correctly', async () => { - await assertMiddlewareRender(false) - }) }) describe('when middleware is removed and re-added', () => { @@ -82,16 +79,13 @@ describe('Middleware development errors', () => { it('sends response correctly', async () => { await assertMiddlewareFetch(true) - }) - // FIXME: the test passes but an error occurs in browser - it.skip('renders correctly', async () => { - await assertMiddlewareRender(true) + // FIXME: the test passes but an error occurs in browser + // await assertMiddlewareRender(true) }) }) - // FIXME: it does not work since middleware is not called - describe.skip('when middleware is added', () => { + describe('when middleware is added', () => { beforeEach(async () => { context.middleware.delete() await assertMiddlewareFetch(false) @@ -99,11 +93,9 @@ describe('Middleware development errors', () => { }) it('sends response correctly', async () => { - await assertMiddlewareFetch(true) - }) - - it('renders correctly', async () => { - await assertMiddlewareRender(true) + await retry(() => assertMiddlewareFetch(true)) + // FIXME: the test passes but an error occurs in browser + // assertMiddlewareRender(true) }) }) @@ -132,11 +124,9 @@ describe('Middleware development errors', () => { it('sends response correctly', async () => { await retry(() => assertMiddlewareFetch(true, '/asdf')) - }) - // FIXME: the test passes but an error occurs in browser - it.skip('renders correctly', async () => { - await retry(() => assertMiddlewareRender(true, '/asdf')) + // FIXME: the test passes but an error occurs in browser + // await retry(() => assertMiddlewareRender(true, '/asdf')) }) }) }) From f5c19d4d846634e0e399405f0cb4f22e1503eaf8 Mon Sep 17 00:00:00 2001 From: nkzawa Date: Fri, 19 Aug 2022 18:26:33 +0700 Subject: [PATCH 4/5] remove unused import --- test/integration/middleware-dev-update/test/index.test.js | 2 -- 1 file changed, 2 deletions(-) diff --git a/test/integration/middleware-dev-update/test/index.test.js b/test/integration/middleware-dev-update/test/index.test.js index fe871cb3347d..a9650f913f9a 100644 --- a/test/integration/middleware-dev-update/test/index.test.js +++ b/test/integration/middleware-dev-update/test/index.test.js @@ -5,10 +5,8 @@ import { killApp, launchApp, retry, - waitFor, } from 'next-test-utils' import { join } from 'path' -import stripAnsi from 'strip-ansi' import webdriver from 'next-webdriver' const context = { From 4d6ba36fa52fbe6870b016d9219404c34f2b8ce1 Mon Sep 17 00:00:00 2001 From: nkzawa Date: Fri, 19 Aug 2022 22:35:06 +0700 Subject: [PATCH 5/5] fix tests --- test/integration/middleware-dev-update/middleware.js | 2 ++ .../middleware-dev-update/test/index.test.js | 11 +++-------- 2 files changed, 5 insertions(+), 8 deletions(-) diff --git a/test/integration/middleware-dev-update/middleware.js b/test/integration/middleware-dev-update/middleware.js index 452c740b97ed..f71c421319fb 100644 --- a/test/integration/middleware-dev-update/middleware.js +++ b/test/integration/middleware-dev-update/middleware.js @@ -1,6 +1,8 @@ import { NextResponse } from 'next/server' export function middleware(request) { + if (request.nextUrl.pathname.startsWith('/_next/')) return + const res = NextResponse.rewrite(new URL('/', request.url)) res.headers.set('X-From-Middleware', 'true') return res diff --git a/test/integration/middleware-dev-update/test/index.test.js b/test/integration/middleware-dev-update/test/index.test.js index a9650f913f9a..d6a574868745 100644 --- a/test/integration/middleware-dev-update/test/index.test.js +++ b/test/integration/middleware-dev-update/test/index.test.js @@ -77,9 +77,7 @@ describe('Middleware development errors', () => { it('sends response correctly', async () => { await assertMiddlewareFetch(true) - - // FIXME: the test passes but an error occurs in browser - // await assertMiddlewareRender(true) + await assertMiddlewareRender(true) }) }) @@ -92,8 +90,7 @@ describe('Middleware development errors', () => { it('sends response correctly', async () => { await retry(() => assertMiddlewareFetch(true)) - // FIXME: the test passes but an error occurs in browser - // assertMiddlewareRender(true) + await assertMiddlewareRender(true) }) }) @@ -122,9 +119,7 @@ describe('Middleware development errors', () => { it('sends response correctly', async () => { await retry(() => assertMiddlewareFetch(true, '/asdf')) - - // FIXME: the test passes but an error occurs in browser - // await retry(() => assertMiddlewareRender(true, '/asdf')) + await retry(() => assertMiddlewareRender(true, '/asdf')) }) }) })