From 705a2b394e574ac5fd8f583847f0474acf5e3769 Mon Sep 17 00:00:00 2001 From: Dominik G Date: Mon, 12 Apr 2021 19:19:23 +0200 Subject: [PATCH] fix(test): improve stability of ssr testsuites by using chokidar polling mode and additional waits (#2954) --- .../ssr-react/__tests__/ssr-react.spec.ts | 13 ++------ packages/playground/ssr-react/server.js | 8 ++++- .../ssr-vue/__tests__/ssr-vue.spec.ts | 13 ++------ packages/playground/ssr-vue/server.js | 8 ++++- packages/playground/testUtils.ts | 31 ------------------- 5 files changed, 20 insertions(+), 53 deletions(-) diff --git a/packages/playground/ssr-react/__tests__/ssr-react.spec.ts b/packages/playground/ssr-react/__tests__/ssr-react.spec.ts index 64457de30b17a3..bf161e03e5143c 100644 --- a/packages/playground/ssr-react/__tests__/ssr-react.spec.ts +++ b/packages/playground/ssr-react/__tests__/ssr-react.spec.ts @@ -1,10 +1,4 @@ -import { - editFile, - getColor, - isBuild, - untilUpdated, - autoRetry -} from '../../testUtils' +import { editFile, getColor, isBuild, untilUpdated } from '../../testUtils' import { port } from './serve' import fetch from 'node-fetch' @@ -44,10 +38,9 @@ test('hmr', async () => { }) test('client navigation', async () => { + await untilUpdated(() => page.textContent('a[href="/about"]'), 'About') await page.click('a[href="/about"]') - await autoRetry(async () => { - expect(await page.textContent('h1')).toMatch('About') - }) + await untilUpdated(() => page.textContent('h1'), 'About') editFile('src/pages/About.jsx', (code) => code.replace('

About', '

changed') ) diff --git a/packages/playground/ssr-react/server.js b/packages/playground/ssr-react/server.js index 4a6a653a3a781b..7c0c1a81152445 100644 --- a/packages/playground/ssr-react/server.js +++ b/packages/playground/ssr-react/server.js @@ -26,7 +26,13 @@ async function createServer( root, logLevel: isTest ? 'error' : 'info', server: { - middlewareMode: true + middlewareMode: true, + watch: { + // During tests we edit the files too fast and sometimes chokidar + // misses change events, so enforce polling for consistency + usePolling: true, + interval: 100 + } } }) // use vite's connect instance as middleware diff --git a/packages/playground/ssr-vue/__tests__/ssr-vue.spec.ts b/packages/playground/ssr-vue/__tests__/ssr-vue.spec.ts index 343c1140f81106..a86916b1ad7594 100644 --- a/packages/playground/ssr-vue/__tests__/ssr-vue.spec.ts +++ b/packages/playground/ssr-vue/__tests__/ssr-vue.spec.ts @@ -1,10 +1,4 @@ -import { - editFile, - getColor, - isBuild, - untilUpdated, - autoRetry -} from '../../testUtils' +import { editFile, getColor, isBuild, untilUpdated } from '../../testUtils' import { port } from './serve' import fetch from 'node-fetch' @@ -115,10 +109,9 @@ test('hmr', async () => { }) test('client navigation', async () => { + await untilUpdated(() => page.textContent('a[href="/about"]'), 'About') await page.click('a[href="/about"]') - await autoRetry(async () => { - expect(await page.textContent('h1')).toMatch('About') - }) + await untilUpdated(() => page.textContent('h1'), 'About') editFile('src/pages/About.vue', (code) => code.replace('About', 'changed')) await untilUpdated(() => page.textContent('h1'), 'changed') }) diff --git a/packages/playground/ssr-vue/server.js b/packages/playground/ssr-vue/server.js index 969ab6dacee01a..4ccbc21a4816ab 100644 --- a/packages/playground/ssr-vue/server.js +++ b/packages/playground/ssr-vue/server.js @@ -31,7 +31,13 @@ async function createServer( root, logLevel: isTest ? 'error' : 'info', server: { - middlewareMode: true + middlewareMode: true, + watch: { + // During tests we edit the files too fast and sometimes chokidar + // misses change events, so enforce polling for consistency + usePolling: true, + interval: 100 + } } }) // use vite's connect instance as middleware diff --git a/packages/playground/testUtils.ts b/packages/playground/testUtils.ts index 10e2d9d618532c..3da60754c891d0 100644 --- a/packages/playground/testUtils.ts +++ b/packages/playground/testUtils.ts @@ -119,34 +119,3 @@ export async function untilUpdated( } } } - -export async function autoRetry( - test: () => void | Promise -): Promise { - const timeout = 60 * 1000 - const period = 100 - const numberOfTries = timeout / period - let i = 0 - while (true) { - try { - await test() - return - } catch (err) { - i = i + 1 - if (i > numberOfTries) { - throw err - } - } - await sleep(period) - } - - return - - function sleep(milliseconds: number): Promise { - return new Promise((resolve) => - setTimeout(() => { - resolve() - }, milliseconds) - ) - } -}