7a1fca6676
findElectron() probed exactly one path, and got three things wrong at once for anyone not on a hoisted POSIX install: * It looked only under the REPO ROOT. This is an npm workspaces repo and npm hoists a dependency only when nothing conflicts, so `electron` installing into apps/desktop/node_modules is an ordinary outcome, not a broken tree. * It joined a bare `electron`. On Windows the dist file is `electron.exe`, so the probe could never match there. * Its PATH fallback spawned `which`, which is not a command on Windows, so the fallback failed for a reason unrelated to whether electron is on PATH. The three combine into a misleading error: the suite refuses to start with 'Run "npm install" from the repo root' on a tree that has electron installed. Reproduced on Windows 11 against this repo, where apps/desktop/node_modules/electron/dist/electron.exe exists and the old body throws that message; the reporter on #88036 hit the same thing on Linux and had to hand-symlink the package before the suite would run. Resolution now asks the installed `electron` package for its own path first (its main export IS the absolute executable, resolved from path.txt and honouring ELECTRON_OVERRIDE_DIST_PATH), then falls back to explicit dist probes for each root, then to PATH with the platform's lookup command. The error message lists what was searched. The rules live in e2e/electron-binary.ts so they can be unit-tested without importing the Playwright runner, with the platform passed in rather than read from process.platform: reading it would leave every Windows rule untested on the Linux CI runner. Wiring: the vitest `electron` project picks up e2e/**/*.unit.test.ts and Playwright ignores the same pattern, so helper unit tests run in exactly one runner and the specs are untouched. Verified: 5 unit tests pass; mutation-checked one rule at a time (hardcoding the binary name fails 2, reversing the probe order fails 1, hardcoding `which` fails 1). tsc -p . and tsc -p tsconfig.e2e.json clean. This is the environment blocker called out in #88036, not its rendering bug, so it is deliberately a subset. Refs #88036
36 lines
1.1 KiB
TypeScript
36 lines
1.1 KiB
TypeScript
import type { TestProjectConfiguration } from 'vitest/config'
|
|
import { defineConfig } from 'vitest/config'
|
|
|
|
const reactUi: TestProjectConfiguration = {
|
|
extends: './vite.config.ts',
|
|
test: {
|
|
name: 'ui',
|
|
environment: 'jsdom',
|
|
setupFiles: ['./vitest.setup.ts'],
|
|
include: ['src/**/*.test.{ts,tsx}'],
|
|
globals: true,
|
|
// The first test in each file pays jsdom env init + full module transform,
|
|
// which can exceed vitest's 5000ms default under CI/load. 15s gives the
|
|
// cold start headroom without masking genuinely hung tests.
|
|
testTimeout: 15_000
|
|
}
|
|
}
|
|
|
|
const electronNative: TestProjectConfiguration = {
|
|
test: {
|
|
name: 'electron',
|
|
environment: 'node',
|
|
// `e2e/**/*.unit.test.ts` is the e2e HELPERS, not the specs: plain node
|
|
// modules that should be provable without booting Electron. Playwright
|
|
// ignores the same pattern so they run in exactly one runner.
|
|
include: ['electron/**/*.test.ts', 'scripts/**.test.{ts,mjs}', 'e2e/**/*.unit.test.ts'],
|
|
exclude: ['scripts/run-short-session-hang-repro.test.mjs']
|
|
}
|
|
}
|
|
|
|
export default defineConfig({
|
|
test: {
|
|
projects: [reactUi, electronNative]
|
|
}
|
|
})
|