From 7767a42fff186aac872e15aea049a92c5520de8b Mon Sep 17 00:00:00 2001 From: JJ Kasper Date: Mon, 24 Feb 2020 03:14:46 -0600 Subject: [PATCH] Make sure to log errors from data fetching in dev mode in the console (#10652) --- packages/next/next-server/server/render.tsx | 1 + test/integration/prerender/pages/index.js | 2 ++ test/integration/prerender/test/index.test.js | 28 ++++++++++++++++++- 3 files changed, 30 insertions(+), 1 deletion(-) diff --git a/packages/next/next-server/server/render.tsx b/packages/next/next-server/server/render.tsx index f0e7a8b7c56883a..ae4d7ceefd57a1c 100644 --- a/packages/next/next-server/server/render.tsx +++ b/packages/next/next-server/server/render.tsx @@ -526,6 +526,7 @@ export async function renderToHTML( if (!dev || !err) throw err ctx.err = err renderOpts.err = err + console.error(err) } if (unstable_getServerProps && !isFallback) { diff --git a/test/integration/prerender/pages/index.js b/test/integration/prerender/pages/index.js index 3d639e231c037ee..1c9bf5259b50534 100644 --- a/test/integration/prerender/pages/index.js +++ b/test/integration/prerender/pages/index.js @@ -2,6 +2,7 @@ import Link from 'next/link' // eslint-disable-next-line camelcase export async function unstable_getStaticProps() { + // throw new Error('oops from getStaticProps') return { props: { world: 'world', time: new Date().getTime() }, // bad-prop @@ -12,6 +13,7 @@ export async function unstable_getStaticProps() { const Page = ({ world, time }) => { return ( <> + {/*
idk
*/}

hello {world}

time: {time} diff --git a/test/integration/prerender/test/index.test.js b/test/integration/prerender/test/index.test.js index 1de888d0808e25d..bb2350a74c78ab6 100644 --- a/test/integration/prerender/test/index.test.js +++ b/test/integration/prerender/test/index.test.js @@ -19,11 +19,13 @@ import { normalizeRegEx, startStaticServer, initNextServerScript, + getReactErrorOverlayContent, } from 'next-test-utils' jasmine.DEFAULT_TIMEOUT_INTERVAL = 1000 * 60 * 2 const appDir = join(__dirname, '..') const nextConfig = join(appDir, 'next.config.js') +const indexPage = join(__dirname, '../pages/index.js') let app let appPort let buildId @@ -413,6 +415,31 @@ const runTests = (dev = false) => { // ) // }) + it('should log error in console and browser in dev mode', async () => { + const origContent = await fs.readFile(indexPage, 'utf8') + + const browser = await webdriver(appPort, '/') + expect(await browser.elementByCss('p').text()).toMatch(/hello.*?world/) + + await fs.writeFile( + indexPage, + origContent + .replace('// throw new', 'throw new') + .replace('{/* */}', '') + ) + await browser.waitForElementByCss('#after-change') + // we need to reload the page to trigger getStaticProps + await browser.refresh() + + const errOverlayContent = await getReactErrorOverlayContent(browser) + + await fs.writeFile(indexPage, origContent) + const errorMsg = /oops from getStaticProps/ + expect(stderr).toMatch(errorMsg) + expect(errOverlayContent).toMatch(errorMsg) + }) + it('should always call getStaticProps without caching in dev', async () => { const initialRes = await fetchViaHTTP(appPort, '/something') expect(initialRes.headers.get('cache-control')).toBeFalsy() @@ -433,7 +460,6 @@ const runTests = (dev = false) => { }) it('should error on bad object from getStaticProps', async () => { - const indexPage = join(__dirname, '../pages/index.js') const origContent = await fs.readFile(indexPage, 'utf8') await fs.writeFile( indexPage,