From 2671d13eaabcbb8b78828a552c2f1d405ddab603 Mon Sep 17 00:00:00 2001 From: Jimmy Lai Date: Tue, 24 Jan 2023 20:36:35 +0100 Subject: [PATCH 1/3] change strategy for test --- packages/next/src/client/use-intersection.tsx | 1 - .../preload-viewport/test/index.test.js | 30 +++++++++++-------- 2 files changed, 18 insertions(+), 13 deletions(-) diff --git a/packages/next/src/client/use-intersection.tsx b/packages/next/src/client/use-intersection.tsx index 38510ccbb57c4..27562ad966bbc 100644 --- a/packages/next/src/client/use-intersection.tsx +++ b/packages/next/src/client/use-intersection.tsx @@ -101,7 +101,6 @@ export function useIntersection({ const isDisabled: boolean = disabled || !hasIntersectionObserver const [visible, setVisible] = useState(false) - // const [element, setElement] = useState(null) const elementRef = useRef(null) const setElement = useCallback((element: T | null) => { elementRef.current = element diff --git a/test/integration/preload-viewport/test/index.test.js b/test/integration/preload-viewport/test/index.test.js index 9f0e023ea54c6..f008b699548bb 100644 --- a/test/integration/preload-viewport/test/index.test.js +++ b/test/integration/preload-viewport/test/index.test.js @@ -6,6 +6,7 @@ import { nextBuild, nextStart, waitFor, + check, } from 'next-test-utils' import http from 'http' import httpProxy from 'http-proxy' @@ -436,18 +437,23 @@ describe('Prefetching Links in viewport', () => { it('should not add an another observer for a prefetched page', async () => { // info: both `/` and `/de-duped` ref the `/first` page, which we don't // want to be re-fetched/re-observed. - const browser = await webdriver(appPort, '/') - await browser.eval(`(function() { - window.calledPrefetch = false - window.next.router.prefetch = function() { - window.calledPrefetch = true - return Promise.resolve() - } - window.next.router.push('/de-duped') - })()`) - await waitFor(2 * 1000) - const calledPrefetch = await browser.eval(`window.calledPrefetch`) - expect(calledPrefetch).toBe(false) + const browser = await webdriver(appPort, '/', { + waitHydration: false, + }) + + let requests = [] + + browser.on('request', (req) => { + requests.push(new URL(req.url()).pathname) + }) + + await waitFor(3 * 1000) + const initialRequests = requests.length + await browser.eval(`window.next.router.push('/de-duped')`) + await waitFor(3 * 1000) + const finalRequests = requests.length + + expect(finalRequests).toBe(initialRequests + 1) }) it('should prefetch with a different asPath for a prefetched page', async () => { From df374e900a01d95b36ae3ea83fb2b33f3115c252 Mon Sep 17 00:00:00 2001 From: Jimmy Lai Date: Tue, 24 Jan 2023 20:58:43 +0100 Subject: [PATCH 2/3] lint --- test/integration/preload-viewport/test/index.test.js | 1 - 1 file changed, 1 deletion(-) diff --git a/test/integration/preload-viewport/test/index.test.js b/test/integration/preload-viewport/test/index.test.js index f008b699548bb..11961af080fe6 100644 --- a/test/integration/preload-viewport/test/index.test.js +++ b/test/integration/preload-viewport/test/index.test.js @@ -6,7 +6,6 @@ import { nextBuild, nextStart, waitFor, - check, } from 'next-test-utils' import http from 'http' import httpProxy from 'http-proxy' From 212ff6df3c78be98a31aec8c5c029f8cd23cd812 Mon Sep 17 00:00:00 2001 From: JJ Kasper Date: Tue, 24 Jan 2023 15:29:01 -0800 Subject: [PATCH 3/3] update tests --- .../preload-viewport/test/index.test.js | 89 ++++++++++++------- 1 file changed, 56 insertions(+), 33 deletions(-) diff --git a/test/integration/preload-viewport/test/index.test.js b/test/integration/preload-viewport/test/index.test.js index 11961af080fe6..36f5e0ab875e7 100644 --- a/test/integration/preload-viewport/test/index.test.js +++ b/test/integration/preload-viewport/test/index.test.js @@ -1,6 +1,7 @@ /* eslint-env jest */ import { + check, findPort, killApp, nextBuild, @@ -94,17 +95,21 @@ describe('Prefetching Links in viewport', () => { let browser try { browser = await webdriver(appPort, '/') - const links = await browser.elementsByCss('link[rel=prefetch]') - let found = false - for (const link of links) { - const href = await link.getAttribute('href') - if (href.includes('first')) { - found = true - break + await check(async () => { + const links = await browser.elementsByCss('link[rel=prefetch]') + let found = false + + for (const link of links) { + const href = await link.getAttribute('href') + if (href.includes('first')) { + found = true + break + } } - } - expect(found).toBe(true) + expect(found).toBe(true) + return 'success' + }, 'success') } finally { if (browser) await browser.close() } @@ -146,17 +151,21 @@ describe('Prefetching Links in viewport', () => { let browser try { browser = await webdriver(appPort, '/rewrite-prefetch') - const links = await browser.elementsByCss('link[rel=prefetch]') - let found = false - for (const link of links) { - const href = await link.getAttribute('href') - if (href.includes('%5Bslug%5D')) { - found = true - break + await check(async () => { + const links = await browser.elementsByCss('link[rel=prefetch]') + let found = false + + for (const link of links) { + const href = await link.getAttribute('href') + if (href.includes('%5Bslug%5D')) { + found = true + break + } } - } - expect(found).toBe(true) + expect(found).toBe(true) + return 'success' + }, 'success') const hrefs = await browser.eval(`Object.keys(window.next.router.sdc)`) expect(hrefs.map((href) => new URL(href).pathname)).toEqual([ @@ -433,26 +442,40 @@ describe('Prefetching Links in viewport', () => { expect(hrefs.some((e) => e.includes(`%5Bhello%5D-`))).toBe(true) }) - it('should not add an another observer for a prefetched page', async () => { + it('should not re-prefetch for an already prefetched page', async () => { // info: both `/` and `/de-duped` ref the `/first` page, which we don't // want to be re-fetched/re-observed. - const browser = await webdriver(appPort, '/', { - waitHydration: false, - }) - - let requests = [] + const browser = await webdriver(appPort, '/') - browser.on('request', (req) => { - requests.push(new URL(req.url()).pathname) - }) + await check(async () => { + const links = await browser.elementsByCss('link[rel=prefetch]') + let found = false - await waitFor(3 * 1000) - const initialRequests = requests.length - await browser.eval(`window.next.router.push('/de-duped')`) - await waitFor(3 * 1000) - const finalRequests = requests.length + for (const link of links) { + const href = await link.getAttribute('href') + if (href.includes('first')) { + found = true + break + } + } + expect(found).toBe(true) + return 'success' + }, 'success') - expect(finalRequests).toBe(initialRequests + 1) + await browser.eval(`(function() { + window.calledPrefetch = false + window.next.router.prefetch = function() { + window.calledPrefetch = true + return Promise.resolve() + } + window.next.router.push('/de-duped') + })()`) + await check( + () => browser.eval('document.documentElement.innerHTML'), + /to \/first/ + ) + const calledPrefetch = await browser.eval(`window.calledPrefetch`) + expect(calledPrefetch).toBe(false) }) it('should prefetch with a different asPath for a prefetched page', async () => {