From d13019854ee032513e256cb3c11a91a4bfe0c58c Mon Sep 17 00:00:00 2001 From: LongYinan Date: Fri, 13 May 2022 10:55:06 +0800 Subject: [PATCH] Make esm default interpolation work with jest mock --- packages/next/taskfile-swc.js | 1 + test/unit/esm-interpolate/esm-interpolate.test.tsx | 14 ++++++++++++++ test/unit/esm-interpolate/fixture.tsx | 8 ++++++++ 3 files changed, 23 insertions(+) create mode 100644 test/unit/esm-interpolate/esm-interpolate.test.tsx create mode 100644 test/unit/esm-interpolate/fixture.tsx diff --git a/packages/next/taskfile-swc.js b/packages/next/taskfile-swc.js index 71f79fc86477..45e985cb7cc6 100644 --- a/packages/next/taskfile-swc.js +++ b/packages/next/taskfile-swc.js @@ -118,6 +118,7 @@ module.exports = function (task) { if (interopClientDefaultExport) { output.code += ` if (typeof exports.default === 'function' || (typeof exports.default === 'object' && exports.default !== null)) { + Object.defineProperty(exports.default, '__esModule', { value: true }); Object.assign(exports.default, exports); module.exports = exports.default; } diff --git a/test/unit/esm-interpolate/esm-interpolate.test.tsx b/test/unit/esm-interpolate/esm-interpolate.test.tsx new file mode 100644 index 000000000000..c6ffb8137582 --- /dev/null +++ b/test/unit/esm-interpolate/esm-interpolate.test.tsx @@ -0,0 +1,14 @@ +import React from 'react' +import { renderToString } from 'react-dom/server' +import * as nextRouter from 'next/router' + +import { Foo } from './fixture' + +// @ts-expect-error +jest.spyOn(nextRouter, 'useRouter').mockReturnValue({ + pathname: 'Hello', +}) + +test('mock the interpolated modules should work', () => { + expect(renderToString()).toBe(`
Hello
`) +}) diff --git a/test/unit/esm-interpolate/fixture.tsx b/test/unit/esm-interpolate/fixture.tsx new file mode 100644 index 000000000000..90485c11e409 --- /dev/null +++ b/test/unit/esm-interpolate/fixture.tsx @@ -0,0 +1,8 @@ +import React from 'react' +import { useRouter } from 'next/router' + +export const Foo = () => { + const router = useRouter() + + return
{router.pathname}
+}