WorkBuddy review found 38 of 131 spec files failed at collection time (0 tests executed) — the '1015 passed' was a false green because vitest only counts 'Tests failed', not 'Test Files failed'. Root cause: dsh-client-ui-primitives@0.2.0-rc.2 declares dependencies:null but statically imports 23 external root packages. Our project declared only 18. Under pnpm strict layout, the missing 5 (dsh-client-store, dsh-util-code-language, dsh-util-workspace-path, diff, simple-icons) were unresolvable when Vite inlined the primitives package. Fixes: - Add 7 missing devDeps: dsh-client-store@0.2.0-rc.2, dsh-util-code-language@0.2.0-rc.2, dsh-util-workspace-path@0.2.0-rc.2, diff@9.0.0, simple-icons@16.35.0, zustand@5.0.15, immer@11.1.21 - vitest.config.ts: add transform plugin to strip sourceMappingURL comments from dsh-client-ui-primitives (upstream ships lib/index.js with trailing sourceMappingURL but package.json files excludes .map) - 5 spec files: add @vitest-environment jsdom directive (they import dsh-client-ui-primitives which calls window.addEventListener at module load; node environment lacks window) - Remove empty .map file hack from node_modules (ineffective + .gitignore blocks it from version control) Result: Test Files 131 passed (131), Tests 1367 passed | 9 skipped, EXIT=0. Verified: simple-icons 25 named exports all present. Typecheck + build pass.
66 lines
3.1 KiB
TypeScript
66 lines
3.1 KiB
TypeScript
/**
|
||
* Vitest config: inline the npm-published `@deepseek-ai/*` packages whose
|
||
* BUILT lib bundles css side-effect imports (e.g. `dsh-client-ui-primitives`
|
||
* imports `katex/dist/katex.min.css` at the top of its `lib/index.js`).
|
||
*
|
||
* Installed from the npm registry (the default since v0.4.1) these packages
|
||
* live under `node_modules/.pnpm` and are externalized by vitest — Node then
|
||
* chokes on the `.css` import. Inlining routes them through Vite's transform,
|
||
* which stubs css imports (the default `css: false`). The previous
|
||
* `link:`-to-source-checkout install needed no such config: linked files sit
|
||
* outside `node_modules` and are transformed by default.
|
||
*/
|
||
import { defineConfig } from 'vitest/config'
|
||
|
||
// 上游 dsh-client-ui-primitives 的 lib 带 sourceMappingURL 注释但未发布 map
|
||
// 文件(package.json 的 files 不含 .map)→ Vite 读 map 报 ENOENT。
|
||
// 这里在 transform 阶段剥掉该注释;不要手改 node_modules(pnpm install 即失效)。
|
||
const stripMissingSourcemapRefs = {
|
||
name: 'strip-missing-sourcemap-refs',
|
||
enforce: 'pre' as const,
|
||
transform(code: string, id: string) {
|
||
if (!id.includes('dsh-client-ui-primitives')) return
|
||
if (!code.includes('sourceMappingURL')) return
|
||
return { code: code.replace(/\/\/\/?\s*sourceMappingURL=.*$/gm, ''), map: null }
|
||
},
|
||
}
|
||
|
||
export default defineConfig({
|
||
plugins: [stripMissingSourcemapRefs],
|
||
test: {
|
||
// Bridge Node's `localStorage` accessor to jsdom's store (see the file).
|
||
setupFiles: ['tests/setup.ts'],
|
||
server: {
|
||
deps: {
|
||
inline: [/@deepseek-ai\/dsh-client-ui-primitives/],
|
||
},
|
||
},
|
||
// A handful of suites drive REAL processes (git, powershell, node-pty),
|
||
// and vitest's 5000 ms default is simply below what a loaded 2-core CI
|
||
// runner needs for a single cold spawn: the 2026-09-09/10 window lost
|
||
// cases in tests/agent-pty.spec.ts (a PowerShell + ConPTY pair per
|
||
// terminal), tests/install-powershell.spec.ts (12.1 s for one
|
||
// powershell.exe start) and tests/git.spec.ts (9.6 s to build a
|
||
// pathological untracked set) — three different files, one cause. Raise
|
||
// the default to cover them; the pty and PowerShell suites still declare
|
||
// their own 30 s budgets, and a genuinely hung test still fails.
|
||
testTimeout: 15_000,
|
||
// The Playwright headless-render lane lives in tests/e2e (specs named
|
||
// *.e2e.ts). Keep vitest from ever collecting it, both by naming (the
|
||
// default include only matches *.test.* / *.spec.*) and by an explicit
|
||
// exclude. NOTE: `exclude` REPLACES vitest's defaults, so the standard
|
||
// node_modules/dist/etc. excludes must be restated here.
|
||
exclude: [
|
||
'tests/e2e/**',
|
||
// Local dev worktrees (pnpm/DSH-style task branches) may carry stale
|
||
// code against this checkout's node_modules — never collect them.
|
||
'**/.worktrees/**',
|
||
'**/node_modules/**',
|
||
'**/dist/**',
|
||
'**/cypress/**',
|
||
'**/.{idea,git,cache,output,temp}/**',
|
||
'**/{karma,rollup,webpack,vite,vitest,jest,ava,babel,nyc,cypress,tsup,build,eslint,prettier}.config.*',
|
||
],
|
||
},
|
||
})
|