From 3e54443a283478535b5940161ad4e1c9ee720363 Mon Sep 17 00:00:00 2001 From: Hiroshi Ogawa Date: Wed, 3 Jan 2024 16:19:07 +0900 Subject: [PATCH 01/17] fix(vitest): fix browser testing url for https --- packages/vitest/src/node/logger.ts | 3 ++- packages/vitest/src/node/pools/browser.ts | 2 +- 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/packages/vitest/src/node/logger.ts b/packages/vitest/src/node/logger.ts index 8a3e736f1726..4b879ab4b65c 100644 --- a/packages/vitest/src/node/logger.ts +++ b/packages/vitest/src/node/logger.ts @@ -149,7 +149,8 @@ export class Logger { const name = project.getName() const output = project.isCore() ? '' : ` [${name}]` - this.log(c.dim(c.green(` ${output} Browser runner started at http://${project.config.browser.api?.host || 'localhost'}:${c.bold(`${project.browser.config.server.port}`)}`))) + const url = project.browser.resolvedUrls?.local[0] + this.log(c.dim(c.green(` ${output} Browser runner started at ${url}`))) }) if (this.ctx.config.ui) diff --git a/packages/vitest/src/node/pools/browser.ts b/packages/vitest/src/node/pools/browser.ts index fdbaa08f8af4..df6b98174228 100644 --- a/packages/vitest/src/node/pools/browser.ts +++ b/packages/vitest/src/node/pools/browser.ts @@ -38,7 +38,7 @@ export function createBrowserPool(ctx: Vitest): ProcessPool { const provider = project.browserProvider! providers.add(provider) - const origin = `http://${ctx.config.browser.api?.host || 'localhost'}:${project.browser!.config.server.port}` + const origin = project.browser?.resolvedUrls?.local[0] const paths = files.map(file => relative(project.config.root, file)) if (project.config.browser.isolate) { From 4fcabfaa6fcf87e9f3e67b500195980a71e4e9e7 Mon Sep 17 00:00:00 2001 From: Hiroshi Ogawa Date: Wed, 3 Jan 2024 18:41:02 +0900 Subject: [PATCH 02/17] test: manual test https --- pnpm-lock.yaml | 39 ++++++++++++------- .../browser/fixtures/server-url/basic.test.ts | 5 +++ .../fixtures/server-url/vitest.config.ts | 22 +++++++++++ test/browser/package.json | 2 + test/browser/specs/server-url.test.mjs | 31 +++++++++++++++ test/browser/vitest.config.mts | 3 +- 6 files changed, 87 insertions(+), 15 deletions(-) create mode 100644 test/browser/fixtures/server-url/basic.test.ts create mode 100644 test/browser/fixtures/server-url/vitest.config.ts create mode 100644 test/browser/specs/server-url.test.mjs diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 4e5d783c641e..47337123003d 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -143,7 +143,7 @@ importers: version: 4.7.1 unocss: specifier: ^0.57.4 - version: 0.57.4(postcss@8.4.31)(rollup@2.79.1)(vite@5.0.2) + version: 0.57.4(postcss@8.4.32)(rollup@2.79.1)(vite@5.0.2) unplugin-vue-components: specifier: ^0.25.2 version: 0.25.2(rollup@2.79.1)(vue@3.3.8) @@ -155,7 +155,7 @@ importers: version: 0.16.7(vite@5.0.2)(workbox-build@7.0.0)(workbox-window@7.0.0) vitepress: specifier: ^1.0.0-rc.34 - version: 1.0.0-rc.34(@types/node@18.18.9)(postcss@8.4.31)(search-insights@2.9.0)(typescript@5.2.2) + version: 1.0.0-rc.34(@types/node@18.18.9)(postcss@8.4.32)(search-insights@2.9.0)(typescript@5.2.2) workbox-window: specifier: ^7.0.0 version: 7.0.0 @@ -1191,7 +1191,7 @@ importers: version: 3.1.5 unocss: specifier: ^0.57.4 - version: 0.57.4(postcss@8.4.31)(rollup@4.4.0)(vite@5.0.2) + version: 0.57.4(postcss@8.4.32)(rollup@4.4.0)(vite@5.0.2) unplugin-auto-import: specifier: ^0.16.7 version: 0.16.7(@vueuse/core@10.6.1)(rollup@4.4.0) @@ -1476,6 +1476,9 @@ importers: test/browser: devDependencies: + '@vitejs/plugin-basic-ssl': + specifier: ^1.0.2 + version: 1.0.2(vite@5.0.2) '@vitest/browser': specifier: workspace:* version: link:../../packages/browser @@ -6247,7 +6250,7 @@ packages: '@emotion/cache': 11.11.0 '@emotion/react': 11.10.4(@babel/core@7.23.3)(@types/react@18.2.37)(react@18.2.0) '@emotion/styled': 11.10.4(@babel/core@7.23.3)(@emotion/react@11.10.4)(@types/react@18.2.37)(react@18.2.0) - csstype: 3.1.2 + csstype: 3.1.3 prop-types: 15.8.1 react: 18.2.0 dev: false @@ -6307,7 +6310,7 @@ packages: '@mui/utils': 5.14.14(@types/react@18.2.37)(react@18.2.0) '@types/react': 18.2.37 clsx: 2.0.0 - csstype: 3.1.2 + csstype: 3.1.3 prop-types: 15.8.1 react: 18.2.0 dev: false @@ -9812,7 +9815,7 @@ packages: sirv: 2.0.4 dev: true - /@unocss/postcss@0.57.4(postcss@8.4.31): + /@unocss/postcss@0.57.4(postcss@8.4.32): resolution: {integrity: sha512-ggq8JS4rvgvW2QXjLGwg+m8e4YcmvOtbUS6C7UCrP8pmUqBCpbnTmLi6inpBbBuCN5WokecNZS5f3C4EwNMOMA==} engines: {node: '>=14'} peerDependencies: @@ -9824,7 +9827,7 @@ packages: css-tree: 2.3.1 fast-glob: 3.3.2 magic-string: 0.30.5 - postcss: 8.4.31 + postcss: 8.4.32 dev: true /@unocss/preset-attributify@0.57.4: @@ -9997,6 +10000,15 @@ packages: vite-plugin-pwa: 0.16.7(vite@5.0.2)(workbox-build@7.0.0)(workbox-window@7.0.0) dev: true + /@vitejs/plugin-basic-ssl@1.0.2(vite@5.0.2): + resolution: {integrity: sha512-DKHKVtpI+eA5fvObVgQ3QtTGU70CcCnedalzqmGSR050AzKZMdUzgC8KmlOneHWH8dF2hJ3wkC9+8FDVAaDRCw==} + engines: {node: '>=14.6.0'} + peerDependencies: + vite: ^5.0.0 + dependencies: + vite: 5.0.2(@types/node@18.18.9)(less@4.1.3) + dev: true + /@vitejs/plugin-react@1.3.2: resolution: {integrity: sha512-aurBNmMo0kz1O4qRoY+FM4epSA39y3ShWGuqfLRA/3z0oEJAdtoSfgA3aO98/PCCHAqMaduLxIxErWrVKIFzXA==} engines: {node: '>=12.0.0'} @@ -13519,7 +13531,6 @@ packages: /csstype@3.1.3: resolution: {integrity: sha512-M1uQkMl8rQK/szD0LNhtqxIPLpimGm8sOBwU7lLnCpSbTyY3yeU1Vc7l4KT5zT4s/yOxHH5O7tIuuLOCnLADRw==} - dev: true /currently-unhandled@0.4.1: resolution: {integrity: sha512-/fITjgjGU50vjQ4FH6eUoYu+iUoUKIXws2hL15JJpIR+BbTxaXQsMuuyjtNh2WqsSBS5nsaZHFsFecyw5CCAng==} @@ -25392,7 +25403,7 @@ packages: detect-node: 2.1.0 dev: false - /unocss@0.57.4(postcss@8.4.31)(rollup@2.79.1)(vite@5.0.2): + /unocss@0.57.4(postcss@8.4.32)(rollup@2.79.1)(vite@5.0.2): resolution: {integrity: sha512-rf5eiCVb8957rqzCyRxLzljeYguVMS70X322/Z1sYhosKhh8SBBMsC/TrZEf5o8LTn/MbFN9fVizEtbUKaFjUg==} engines: {node: '>=14'} peerDependencies: @@ -25408,7 +25419,7 @@ packages: '@unocss/cli': 0.57.4(rollup@2.79.1) '@unocss/core': 0.57.4 '@unocss/extractor-arbitrary-variants': 0.57.4 - '@unocss/postcss': 0.57.4(postcss@8.4.31) + '@unocss/postcss': 0.57.4(postcss@8.4.32) '@unocss/preset-attributify': 0.57.4 '@unocss/preset-icons': 0.57.4 '@unocss/preset-mini': 0.57.4 @@ -25431,7 +25442,7 @@ packages: - supports-color dev: true - /unocss@0.57.4(postcss@8.4.31)(rollup@4.4.0)(vite@5.0.2): + /unocss@0.57.4(postcss@8.4.32)(rollup@4.4.0)(vite@5.0.2): resolution: {integrity: sha512-rf5eiCVb8957rqzCyRxLzljeYguVMS70X322/Z1sYhosKhh8SBBMsC/TrZEf5o8LTn/MbFN9fVizEtbUKaFjUg==} engines: {node: '>=14'} peerDependencies: @@ -25447,7 +25458,7 @@ packages: '@unocss/cli': 0.57.4(rollup@4.4.0) '@unocss/core': 0.57.4 '@unocss/extractor-arbitrary-variants': 0.57.4 - '@unocss/postcss': 0.57.4(postcss@8.4.31) + '@unocss/postcss': 0.57.4(postcss@8.4.32) '@unocss/preset-attributify': 0.57.4 '@unocss/preset-icons': 0.57.4 '@unocss/preset-mini': 0.57.4 @@ -26028,7 +26039,7 @@ packages: vite: 5.0.2(@types/node@18.18.9)(less@4.1.3) dev: true - /vitepress@1.0.0-rc.34(@types/node@18.18.9)(postcss@8.4.31)(search-insights@2.9.0)(typescript@5.2.2): + /vitepress@1.0.0-rc.34(@types/node@18.18.9)(postcss@8.4.32)(search-insights@2.9.0)(typescript@5.2.2): resolution: {integrity: sha512-TUbTiSdAZFni2XlHlpx61KikgkQ5uG4Wtmw2R0SXhIOG6qGqzDJczAFjkMc4i45I9c3KyatwOYe8oEfCnzVYwQ==} hasBin: true peerDependencies: @@ -26051,7 +26062,7 @@ packages: mark.js: 8.11.1 minisearch: 6.3.0 mrmime: 2.0.0 - postcss: 8.4.31 + postcss: 8.4.32 shikiji: 0.9.17 shikiji-core: 0.9.17 shikiji-transformers: 0.9.17 diff --git a/test/browser/fixtures/server-url/basic.test.ts b/test/browser/fixtures/server-url/basic.test.ts new file mode 100644 index 000000000000..cd86a0cd9595 --- /dev/null +++ b/test/browser/fixtures/server-url/basic.test.ts @@ -0,0 +1,5 @@ +import { expect, test } from "vitest"; + +test("bsaic", () => { + expect(1).toBe(1); +}) diff --git a/test/browser/fixtures/server-url/vitest.config.ts b/test/browser/fixtures/server-url/vitest.config.ts new file mode 100644 index 000000000000..4740e1d611aa --- /dev/null +++ b/test/browser/fixtures/server-url/vitest.config.ts @@ -0,0 +1,22 @@ +import { defineConfig } from 'vitest/config' +import basicSsl from '@vitejs/plugin-basic-ssl' + +// test https by +// TEST_HTTPS=1 pnpm test-fixtures --root fixtures/server-url + +const provider = process.env.PROVIDER || 'webdriverio'; +const browser = process.env.BROWSER || (provider === 'playwright' ? 'chromium' : 'chrome'); + +export default defineConfig({ + plugins: [ + // @ts-ignore basicSsl type error? + process.env.TEST_HTTPS && basicSsl() + ], + test: { + browser: { + enabled: true, + provider, + name: browser, + }, + }, +}) diff --git a/test/browser/package.json b/test/browser/package.json index 6f1f4214b041..8bab47044705 100644 --- a/test/browser/package.json +++ b/test/browser/package.json @@ -6,9 +6,11 @@ "test": "pnpm run test:webdriverio && pnpm run test:playwright", "test:webdriverio": "PROVIDER=webdriverio node --test specs/", "test:playwright": "PROVIDER=playwright node --test specs/", + "test-fixtures": "vitest", "coverage": "vitest --coverage.enabled --coverage.provider=istanbul --browser.headless=yes" }, "devDependencies": { + "@vitejs/plugin-basic-ssl": "^1.0.2", "@vitest/browser": "workspace:*", "@vitest/cjs-lib": "link:./cjs-lib", "execa": "^7.1.1", diff --git a/test/browser/specs/server-url.test.mjs b/test/browser/specs/server-url.test.mjs new file mode 100644 index 000000000000..5d387ea0fbd7 --- /dev/null +++ b/test/browser/specs/server-url.test.mjs @@ -0,0 +1,31 @@ +import assert from 'node:assert' +import test from 'node:test' +import { execa } from 'execa' + +test("server-url http", async () => { + const result = await execa('npx', ['vitest', 'run', '--root=./fixtures/server-url', '--browser.headless'], { + env: { + CI: "1", + NO_COLOR: "1", + }, + }); + assert.ok(result.stdout.includes("Browser runner started at http://localhost:5173/")); + assert.ok(result.stdout.includes("Test Files 1 passed")); +}) + +test("server-url https", async (t) => { + // the test is skipped since browser warns self-signed https and it requires manual interaction. + // please comment out this "skip" to verify manually. + t.skip(); + return; + + const result = await execa('npx', ['vitest', 'run', '--root=./fixtures/server-url'], { + env: { + NO_COLOR: "1", + TEST_HTTPS: '1', + }, + reject: false, + }); + assert.ok(result.stdout.includes("Browser runner started at https://localhost:5173/")); + assert.ok(result.stdout.includes("Test Files 1 passed")); +}) diff --git a/test/browser/vitest.config.mts b/test/browser/vitest.config.mts index baefd42c8b25..d3e52d1aa8f3 100644 --- a/test/browser/vitest.config.mts +++ b/test/browser/vitest.config.mts @@ -1,6 +1,6 @@ import { dirname, resolve } from 'node:path' import { fileURLToPath } from 'node:url' -import { defineConfig } from 'vitest/config' +import { defaultExclude, defineConfig } from 'vitest/config' const dir = dirname(fileURLToPath(import.meta.url)) @@ -12,6 +12,7 @@ export default defineConfig({ }, test: { include: ['test/**.test.{ts,js}'], + exclude: [...defaultExclude, "**/fixtures/**"], browser: { enabled: true, name: process.env.BROWSER || 'chrome', From 66060195632888b6ad9086dda48fc09e46510dec Mon Sep 17 00:00:00 2001 From: Hiroshi Ogawa Date: Wed, 3 Jan 2024 18:42:44 +0900 Subject: [PATCH 03/17] chore: tweak test --- test/browser/specs/server-url.test.mjs | 10 +++------- 1 file changed, 3 insertions(+), 7 deletions(-) diff --git a/test/browser/specs/server-url.test.mjs b/test/browser/specs/server-url.test.mjs index 5d387ea0fbd7..19c28ec2ba2e 100644 --- a/test/browser/specs/server-url.test.mjs +++ b/test/browser/specs/server-url.test.mjs @@ -13,18 +13,14 @@ test("server-url http", async () => { assert.ok(result.stdout.includes("Test Files 1 passed")); }) -test("server-url https", async (t) => { - // the test is skipped since browser warns self-signed https and it requires manual interaction. - // please comment out this "skip" to verify manually. - t.skip(); - return; - +// the test is skipped since browser warns self-signed https and it requires manual interaction. +// you can toggle `skip` to verify this test locally. +test("server-url https", { skip: true }, async () => { const result = await execa('npx', ['vitest', 'run', '--root=./fixtures/server-url'], { env: { NO_COLOR: "1", TEST_HTTPS: '1', }, - reject: false, }); assert.ok(result.stdout.includes("Browser runner started at https://localhost:5173/")); assert.ok(result.stdout.includes("Test Files 1 passed")); From 4068fc2cb58ebddcd13fac945ef76366dc0041f9 Mon Sep 17 00:00:00 2001 From: Hiroshi Ogawa Date: Wed, 3 Jan 2024 18:47:03 +0900 Subject: [PATCH 04/17] chore: lint --- test/browser/specs/server-url.test.mjs | 24 ++++++++++++------------ test/browser/vitest.config.mts | 2 +- 2 files changed, 13 insertions(+), 13 deletions(-) diff --git a/test/browser/specs/server-url.test.mjs b/test/browser/specs/server-url.test.mjs index 19c28ec2ba2e..8519b05e075b 100644 --- a/test/browser/specs/server-url.test.mjs +++ b/test/browser/specs/server-url.test.mjs @@ -2,26 +2,26 @@ import assert from 'node:assert' import test from 'node:test' import { execa } from 'execa' -test("server-url http", async () => { +test('server-url http', async () => { const result = await execa('npx', ['vitest', 'run', '--root=./fixtures/server-url', '--browser.headless'], { env: { - CI: "1", - NO_COLOR: "1", + CI: '1', + NO_COLOR: '1', }, - }); - assert.ok(result.stdout.includes("Browser runner started at http://localhost:5173/")); - assert.ok(result.stdout.includes("Test Files 1 passed")); + }) + assert.ok(result.stdout.includes('Browser runner started at http://localhost:5173/')) + assert.ok(result.stdout.includes('Test Files 1 passed')) }) // the test is skipped since browser warns self-signed https and it requires manual interaction. -// you can toggle `skip` to verify this test locally. -test("server-url https", { skip: true }, async () => { +// please comment out this "skip" to verify manually. +test('server-url https', { skip: true }, async () => { const result = await execa('npx', ['vitest', 'run', '--root=./fixtures/server-url'], { env: { - NO_COLOR: "1", + NO_COLOR: '1', TEST_HTTPS: '1', }, - }); - assert.ok(result.stdout.includes("Browser runner started at https://localhost:5173/")); - assert.ok(result.stdout.includes("Test Files 1 passed")); + }) + assert.ok(result.stdout.includes('Browser runner started at https://localhost:5173/')) + assert.ok(result.stdout.includes('Test Files 1 passed')) }) diff --git a/test/browser/vitest.config.mts b/test/browser/vitest.config.mts index d3e52d1aa8f3..9684edd6931e 100644 --- a/test/browser/vitest.config.mts +++ b/test/browser/vitest.config.mts @@ -12,7 +12,7 @@ export default defineConfig({ }, test: { include: ['test/**.test.{ts,js}'], - exclude: [...defaultExclude, "**/fixtures/**"], + exclude: [...defaultExclude, '**/fixtures/**'], browser: { enabled: true, name: process.env.BROWSER || 'chrome', From 24b977e062b27e326cc8536878af18e7ee8adc0b Mon Sep 17 00:00:00 2001 From: Hiroshi Ogawa Date: Wed, 3 Jan 2024 18:48:34 +0900 Subject: [PATCH 05/17] ci: "fails-fase: false" --- .github/workflows/ci.yml | 2 ++ 1 file changed, 2 insertions(+) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 741aa592c48f..c72b0bc15e1a 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -143,6 +143,7 @@ jobs: strategy: matrix: browser: [[chrome, chromium], [firefox, firefox], [edge, webkit]] + fail-fast: false timeout-minutes: 30 @@ -186,6 +187,7 @@ jobs: strategy: matrix: browser: [[chrome, chromium], [edge, webkit]] + fail-fast: false timeout-minutes: 30 From d4b67765705e41fc38cc7678cc425274e6c2c442 Mon Sep 17 00:00:00 2001 From: Hiroshi Ogawa Date: Wed, 3 Jan 2024 18:54:57 +0900 Subject: [PATCH 06/17] test: better assert --- test/browser/specs/server-url.test.mjs | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/test/browser/specs/server-url.test.mjs b/test/browser/specs/server-url.test.mjs index 8519b05e075b..a633080d81d3 100644 --- a/test/browser/specs/server-url.test.mjs +++ b/test/browser/specs/server-url.test.mjs @@ -9,12 +9,12 @@ test('server-url http', async () => { NO_COLOR: '1', }, }) - assert.ok(result.stdout.includes('Browser runner started at http://localhost:5173/')) - assert.ok(result.stdout.includes('Test Files 1 passed')) + assert.match(result.stdout, /Browser runner started at http:\/\/localhost:5173\//); + assert.match(result.stdout, /Test Files 1 passed/); }) // the test is skipped since browser warns self-signed https and it requires manual interaction. -// please comment out this "skip" to verify manually. +// you can toggle this "skip" to verify this test locally. test('server-url https', { skip: true }, async () => { const result = await execa('npx', ['vitest', 'run', '--root=./fixtures/server-url'], { env: { @@ -22,6 +22,6 @@ test('server-url https', { skip: true }, async () => { TEST_HTTPS: '1', }, }) - assert.ok(result.stdout.includes('Browser runner started at https://localhost:5173/')) - assert.ok(result.stdout.includes('Test Files 1 passed')) + assert.match(result.stdout, /Browser runner started at https:\/\/localhost:5173\//); + assert.match(result.stdout, /Test Files 1 passed/); }) From 12078dbfdd473bf753f7bfe60de77460b949c08b Mon Sep 17 00:00:00 2001 From: Hiroshi Ogawa Date: Wed, 3 Jan 2024 18:54:57 +0900 Subject: [PATCH 07/17] test: better assert --- test/browser/specs/server-url.test.mjs | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/test/browser/specs/server-url.test.mjs b/test/browser/specs/server-url.test.mjs index 8519b05e075b..a633080d81d3 100644 --- a/test/browser/specs/server-url.test.mjs +++ b/test/browser/specs/server-url.test.mjs @@ -9,12 +9,12 @@ test('server-url http', async () => { NO_COLOR: '1', }, }) - assert.ok(result.stdout.includes('Browser runner started at http://localhost:5173/')) - assert.ok(result.stdout.includes('Test Files 1 passed')) + assert.match(result.stdout, /Browser runner started at http:\/\/localhost:5173\//); + assert.match(result.stdout, /Test Files 1 passed/); }) // the test is skipped since browser warns self-signed https and it requires manual interaction. -// please comment out this "skip" to verify manually. +// you can toggle this "skip" to verify this test locally. test('server-url https', { skip: true }, async () => { const result = await execa('npx', ['vitest', 'run', '--root=./fixtures/server-url'], { env: { @@ -22,6 +22,6 @@ test('server-url https', { skip: true }, async () => { TEST_HTTPS: '1', }, }) - assert.ok(result.stdout.includes('Browser runner started at https://localhost:5173/')) - assert.ok(result.stdout.includes('Test Files 1 passed')) + assert.match(result.stdout, /Browser runner started at https:\/\/localhost:5173\//); + assert.match(result.stdout, /Test Files 1 passed/); }) From bcfa0165b440906838f0f0a2047695ab51617cac Mon Sep 17 00:00:00 2001 From: Hiroshi Ogawa Date: Wed, 3 Jan 2024 18:57:47 +0900 Subject: [PATCH 08/17] chore: lint --- test/browser/specs/server-url.test.mjs | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/test/browser/specs/server-url.test.mjs b/test/browser/specs/server-url.test.mjs index a633080d81d3..0b1646614c72 100644 --- a/test/browser/specs/server-url.test.mjs +++ b/test/browser/specs/server-url.test.mjs @@ -9,8 +9,8 @@ test('server-url http', async () => { NO_COLOR: '1', }, }) - assert.match(result.stdout, /Browser runner started at http:\/\/localhost:5173\//); - assert.match(result.stdout, /Test Files 1 passed/); + assert.match(result.stdout, /Browser runner started at http:\/\/localhost:5173\//) + assert.match(result.stdout, /Test Files {2}1 passed/) }) // the test is skipped since browser warns self-signed https and it requires manual interaction. @@ -22,6 +22,7 @@ test('server-url https', { skip: true }, async () => { TEST_HTTPS: '1', }, }) - assert.match(result.stdout, /Browser runner started at https:\/\/localhost:5173\//); - assert.match(result.stdout, /Test Files 1 passed/); + + assert.match(result.stdout, /Browser runner started at https:\/\/localhost:5173\//) + assert.match(result.stdout, /Test Files {2}1 passed/) }) From c95a42c88e969e504d1fda75ad6e9b622a90889e Mon Sep 17 00:00:00 2001 From: Hiroshi Ogawa Date: Wed, 3 Jan 2024 19:03:36 +0900 Subject: [PATCH 09/17] test: browser test serially --- test/browser/package.json | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/test/browser/package.json b/test/browser/package.json index 8bab47044705..a06bec51acca 100644 --- a/test/browser/package.json +++ b/test/browser/package.json @@ -4,8 +4,8 @@ "private": true, "scripts": { "test": "pnpm run test:webdriverio && pnpm run test:playwright", - "test:webdriverio": "PROVIDER=webdriverio node --test specs/", - "test:playwright": "PROVIDER=playwright node --test specs/", + "test:webdriverio": "PROVIDER=webdriverio node --test --test-concurrency=1 specs/", + "test:playwright": "PROVIDER=playwright node --test --test-concurrency=1 specs/ ", "test-fixtures": "vitest", "coverage": "vitest --coverage.enabled --coverage.provider=istanbul --browser.headless=yes" }, From 4a99736aabdb839ab06fbbd47dc96c15c5e1ea35 Mon Sep 17 00:00:00 2001 From: Hiroshi Ogawa Date: Fri, 5 Jan 2024 09:38:12 +0900 Subject: [PATCH 10/17] fix: resolveUrls is only origin --- packages/vitest/src/node/logger.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/vitest/src/node/logger.ts b/packages/vitest/src/node/logger.ts index 4b879ab4b65c..2d075e760ad8 100644 --- a/packages/vitest/src/node/logger.ts +++ b/packages/vitest/src/node/logger.ts @@ -149,7 +149,7 @@ export class Logger { const name = project.getName() const output = project.isCore() ? '' : ` [${name}]` - const url = project.browser.resolvedUrls?.local[0] + const url = new URL('/', project.browser.resolvedUrls?.local[0]) this.log(c.dim(c.green(` ${output} Browser runner started at ${url}`))) }) From e49f71c1952d23c69f130bb14e6e1a3d8c371ebf Mon Sep 17 00:00:00 2001 From: Hiroshi Ogawa Date: Fri, 5 Jan 2024 18:03:19 +0900 Subject: [PATCH 11/17] chore: moduleResolution bundler --- test/browser/fixtures/server-url/vitest.config.ts | 3 +-- test/browser/tsconfig.json | 3 ++- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/test/browser/fixtures/server-url/vitest.config.ts b/test/browser/fixtures/server-url/vitest.config.ts index 4740e1d611aa..a9cc5a61da33 100644 --- a/test/browser/fixtures/server-url/vitest.config.ts +++ b/test/browser/fixtures/server-url/vitest.config.ts @@ -9,8 +9,7 @@ const browser = process.env.BROWSER || (provider === 'playwright' ? 'chromium' : export default defineConfig({ plugins: [ - // @ts-ignore basicSsl type error? - process.env.TEST_HTTPS && basicSsl() + !!process.env.TEST_HTTPS && basicSsl(), ], test: { browser: { diff --git a/test/browser/tsconfig.json b/test/browser/tsconfig.json index c1bc047f4091..1b1263fab6c2 100644 --- a/test/browser/tsconfig.json +++ b/test/browser/tsconfig.json @@ -1,7 +1,8 @@ { "compilerOptions": { "rootDir": ".", - "module": "node16", + "module": "ESNext", + "moduleResolution": "Bundler", "paths": { "#src/*": ["./src/*"] }, From c16cb13c511b84413569ac982d620dd1fc10fe73 Mon Sep 17 00:00:00 2001 From: Hiroshi Ogawa Date: Fri, 5 Jan 2024 18:06:36 +0900 Subject: [PATCH 12/17] chore: remove redundant exclude --- test/browser/specs/server-url.test.mjs | 4 ++-- test/browser/vitest.config.mts | 3 +-- 2 files changed, 3 insertions(+), 4 deletions(-) diff --git a/test/browser/specs/server-url.test.mjs b/test/browser/specs/server-url.test.mjs index f53f29a5898f..d6413b6bfe2e 100644 --- a/test/browser/specs/server-url.test.mjs +++ b/test/browser/specs/server-url.test.mjs @@ -13,8 +13,8 @@ test('server-url http', async () => { assert.match(result.stdout, /Test Files {2}1 passed/) }) -// the test is skipped since browser warns self-signed https and it requires manual interaction. -// you can toggle this "skip" to verify this test locally. +// this test is skipped since browser warns self-signed https and it requires manual interaction. +// you can toggle "skip" to verify it locally. test('server-url https', { skip: true }, async () => { const result = await execa('npx', ['vitest', 'run', '--root=./fixtures/server-url'], { env: { diff --git a/test/browser/vitest.config.mts b/test/browser/vitest.config.mts index 9684edd6931e..baefd42c8b25 100644 --- a/test/browser/vitest.config.mts +++ b/test/browser/vitest.config.mts @@ -1,6 +1,6 @@ import { dirname, resolve } from 'node:path' import { fileURLToPath } from 'node:url' -import { defaultExclude, defineConfig } from 'vitest/config' +import { defineConfig } from 'vitest/config' const dir = dirname(fileURLToPath(import.meta.url)) @@ -12,7 +12,6 @@ export default defineConfig({ }, test: { include: ['test/**.test.{ts,js}'], - exclude: [...defaultExclude, '**/fixtures/**'], browser: { enabled: true, name: process.env.BROWSER || 'chrome', From 83f4fcd4acbe09afbc40587691a1e097212358df Mon Sep 17 00:00:00 2001 From: Hiroshi Ogawa Date: Tue, 9 Jan 2024 07:55:46 +0900 Subject: [PATCH 13/17] test: separate vite cacheDir --- test/browser/fixtures/server-url/vitest.config.ts | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/test/browser/fixtures/server-url/vitest.config.ts b/test/browser/fixtures/server-url/vitest.config.ts index a9cc5a61da33..201a7553d3e6 100644 --- a/test/browser/fixtures/server-url/vitest.config.ts +++ b/test/browser/fixtures/server-url/vitest.config.ts @@ -1,3 +1,5 @@ +import path from 'node:path' +import { fileURLToPath } from 'node:url' import { defineConfig } from 'vitest/config' import basicSsl from '@vitejs/plugin-basic-ssl' @@ -18,4 +20,7 @@ export default defineConfig({ name: browser, }, }, + // separate cacheDir from test/browser/vite.config.ts + // to prevent pre-bundling related flakiness on Webkit + cacheDir: path.join(path.dirname(fileURLToPath(import.meta.url)), "node_modules/.vite") }) From 4c7caf6d07cd7d12f8be99b60f7cbb8e0498f439 Mon Sep 17 00:00:00 2001 From: Hiroshi Ogawa Date: Tue, 9 Jan 2024 08:01:43 +0900 Subject: [PATCH 14/17] ci: repeat 20 to check flakiness --- .github/workflows/ci.yml | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index c72b0bc15e1a..dd10abdef426 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -178,7 +178,13 @@ jobs: EDGEDRIVER_VERSION: ${{ steps.setup-edge.outputs.edge-version }} - name: Test Browser (playwright) - run: pnpm run test:browser:playwright + run: | + for ((i=0; i<20; i++)); do + echo "::::" + echo ":::: trial (${i})" + echo "::::" + pnpm run test:browser:playwright + done env: BROWSER: ${{ matrix.browser[1] }} From f7147317b1408306a312aa8081e782279ffc7201 Mon Sep 17 00:00:00 2001 From: Hiroshi Ogawa Date: Tue, 9 Jan 2024 08:12:14 +0900 Subject: [PATCH 15/17] chore: typo --- test/browser/fixtures/server-url/basic.test.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/test/browser/fixtures/server-url/basic.test.ts b/test/browser/fixtures/server-url/basic.test.ts index cd86a0cd9595..9bb0283e10c6 100644 --- a/test/browser/fixtures/server-url/basic.test.ts +++ b/test/browser/fixtures/server-url/basic.test.ts @@ -1,5 +1,5 @@ import { expect, test } from "vitest"; -test("bsaic", () => { +test("basic", () => { expect(1).toBe(1); }) From 464801db7516f4e8042e5ff8016a0c91a8968a1d Mon Sep 17 00:00:00 2001 From: Hiroshi Ogawa Date: Tue, 9 Jan 2024 08:13:19 +0900 Subject: [PATCH 16/17] Revert "ci: repeat 20 to check flakiness" This reverts commit 4c7caf6d07cd7d12f8be99b60f7cbb8e0498f439. --- .github/workflows/ci.yml | 8 +------- 1 file changed, 1 insertion(+), 7 deletions(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index dd10abdef426..c72b0bc15e1a 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -178,13 +178,7 @@ jobs: EDGEDRIVER_VERSION: ${{ steps.setup-edge.outputs.edge-version }} - name: Test Browser (playwright) - run: | - for ((i=0; i<20; i++)); do - echo "::::" - echo ":::: trial (${i})" - echo "::::" - pnpm run test:browser:playwright - done + run: pnpm run test:browser:playwright env: BROWSER: ${{ matrix.browser[1] }} From ba594a468035f690910a1238048da93ef833f609 Mon Sep 17 00:00:00 2001 From: Hiroshi Ogawa Date: Tue, 16 Jan 2024 15:54:00 +0900 Subject: [PATCH 17/17] fix: check both "local" and "network" --- packages/vitest/src/node/logger.ts | 5 +++-- packages/vitest/src/node/pools/browser.ts | 3 ++- 2 files changed, 5 insertions(+), 3 deletions(-) diff --git a/packages/vitest/src/node/logger.ts b/packages/vitest/src/node/logger.ts index bd5a3210786d..eb6586940976 100644 --- a/packages/vitest/src/node/logger.ts +++ b/packages/vitest/src/node/logger.ts @@ -166,8 +166,9 @@ export class Logger { const name = project.getName() const output = project.isCore() ? '' : ` [${name}]` - const url = new URL('/', project.browser.resolvedUrls?.local[0]) - this.log(c.dim(c.green(` ${output} Browser runner started at ${url}`))) + const resolvedUrls = project.browser.resolvedUrls + const origin = resolvedUrls?.local[0] ?? resolvedUrls?.network[0] + this.log(c.dim(c.green(` ${output} Browser runner started at ${new URL('/', origin)}`))) }) if (this.ctx.config.ui) diff --git a/packages/vitest/src/node/pools/browser.ts b/packages/vitest/src/node/pools/browser.ts index df6b98174228..f3874ad5d61b 100644 --- a/packages/vitest/src/node/pools/browser.ts +++ b/packages/vitest/src/node/pools/browser.ts @@ -38,7 +38,8 @@ export function createBrowserPool(ctx: Vitest): ProcessPool { const provider = project.browserProvider! providers.add(provider) - const origin = project.browser?.resolvedUrls?.local[0] + const resolvedUrls = project.browser?.resolvedUrls + const origin = resolvedUrls?.local[0] ?? resolvedUrls?.network[0] const paths = files.map(file => relative(project.config.root, file)) if (project.config.browser.isolate) {