From d57c49a8e9db8400988790c24dff2dd930c55176 Mon Sep 17 00:00:00 2001 From: Vladimir Sheremet Date: Wed, 10 Jan 2024 21:36:23 +0100 Subject: [PATCH] test: improve watcher check --- playground/hmr-ssr/__tests__/hmr.spec.ts | 45 ++++++++++++++++-------- 1 file changed, 31 insertions(+), 14 deletions(-) diff --git a/playground/hmr-ssr/__tests__/hmr.spec.ts b/playground/hmr-ssr/__tests__/hmr.spec.ts index 7c0b8808da2087..8f2fc727283393 100644 --- a/playground/hmr-ssr/__tests__/hmr.spec.ts +++ b/playground/hmr-ssr/__tests__/hmr.spec.ts @@ -1,6 +1,6 @@ -import fs from 'node:fs' +import fs, { FSWatcher } from 'node:fs' import { fileURLToPath } from 'node:url' -import { dirname, resolve } from 'node:path' +import { dirname, join, posix, resolve } from 'node:path' import EventEmitter from 'node:events' import { afterAll, beforeAll, describe, expect, test, vi } from 'vitest' import type { InlineConfig, Logger, ViteDevServer } from 'vite' @@ -8,7 +8,7 @@ import { createServer, createViteRuntime } from 'vite' import { ViteRuntimeHMRLogger } from 'vite/runtime' import type { ViteRuntime } from 'vite/runtime' import type { RollupError } from 'rollup' -import { page, promiseWithResolvers, untilUpdated } from '~utils' +import { page, promiseWithResolvers, slash, untilUpdated } from '~utils' let server: ViteDevServer const clientLogs: string[] = [] @@ -490,7 +490,7 @@ describe('acceptExports', () => { beforeAll(async () => { await untilConsoleLogAfter( - () => setupViteRuntime(`/${testDir}`), + () => setupViteRuntime(`/${testDir}/index`), [CONNECTED, />>>>>>/], (logs) => { expect(logs).toContain(`<<< named: ${a} ; ${dep}`) @@ -544,7 +544,7 @@ describe('acceptExports', () => { const file = 'side-effects.ts' await untilConsoleLogAfter( - () => setupViteRuntime(`/${testDir}`), + () => setupViteRuntime(`/${testDir}/index`), [CONNECTED, />>>/], (logs) => { expect(logs).toContain('>>> side FX') @@ -573,7 +573,7 @@ describe('acceptExports', () => { const url = '/' + file await untilConsoleLogAfter( - () => setupViteRuntime(`/${testDir}`), + () => setupViteRuntime(`/${testDir}/index`), [CONNECTED, '-- unused --'], (logs) => { expect(logs).toContain('-- unused --') @@ -596,7 +596,7 @@ describe('acceptExports', () => { const file = `${testDir}/${fileName}` await untilConsoleLogAfter( - () => setupViteRuntime(`/${testDir}`), + () => setupViteRuntime(`/${testDir}/index`), [CONNECTED, '-- used --', 'used:foo0'], (logs) => { expect(logs).toContain('-- used --') @@ -663,7 +663,7 @@ describe('acceptExports', () => { const file = `${testDir}/${fileName}` await untilConsoleLogAfter( - () => setupViteRuntime(`/${testDir}/`), + () => setupViteRuntime(`/${testDir}/index`), [CONNECTED, '>>> ready <<<'], (logs) => { expect(logs).toContain('loaded:some:a0b0c0default0') @@ -985,13 +985,30 @@ async function untilConsoleLog( return logsMessages } -function waitForWatcher(server: ViteDevServer) { +function isWatched(server: ViteDevServer, watchedFile: string) { + const watched = server.watcher.getWatched() + for (const [dir, files] of Object.entries(watched)) { + const unixDir = slash(dir) + for (const file of files) { + const filePath = posix.join(unixDir, file) + if (filePath.includes(watchedFile)) { + return true + } + } + } + return false +} + +function waitForWatcher(server: ViteDevServer, watched: string) { return new Promise((resolve) => { - if ((server.watcher as any)._readyEmitted) { - resolve() - } else { - server.watcher.once('ready', () => resolve()) + function checkWatched() { + if (isWatched(server, watched)) { + resolve() + } else { + setTimeout(checkWatched, 20) + } } + checkWatched() }) } @@ -1076,7 +1093,7 @@ async function setupViteRuntime( }, }) - await waitForWatcher(server) + await waitForWatcher(server, entrypoint) await runtime.executeUrl(entrypoint, true)