Files
noitu/web/vite.config.js
T
tiennm99 69310a3b93 test(web): mount ChatPanel under jsdom for fold and unread accounting
Cover the fold toggle, the unread badge counting only while folded and
clearing on open, the recount after a fold-and-reread cycle, and send/clear.
Needed a resolve.conditions fix in vite.config.js gated on process.env.VITEST
so Vitest picks svelte's client runtime instead of its SSR one for mount();
vite dev and vite build are untouched.
2026-09-21 16:24:20 +07:00

39 lines
1.7 KiB
JavaScript

import { fileURLToPath } from 'node:url';
import { sveltekit } from '@sveltejs/kit/vite';
// vitest/config, not vite: the `test` block below is Vitest's, and vite's own
// config type does not know about it.
import { defineConfig } from 'vitest/config';
export default defineConfig({
plugins: [sveltekit()],
// Vitest does not build client/server bundles the way `vite build` does,
// so without this the "svelte" package resolves its server-rendering
// entry point even for a component test under jsdom, and `mount()`
// throws "not available on the server". `VITEST` is set by Vitest
// itself, so `vite dev` and `vite build` are unaffected.
resolve: process.env.VITEST ? { conditions: ['browser'] } : undefined,
server: {
// Dev runs Vite and the Go binary on different ports, so the socket has
// to be proxied. That keeps the client's URL logic identical in both
// environments: it always connects to its own origin.
proxy: {
'/ws': { target: 'ws://localhost:8080', ws: true },
'/healthz': 'http://localhost:8080'
}
},
test: {
// The default node environment: the cross-language fixture test reads
// files through import.meta.url, which jsdom rewrites to an http URL.
// The two suites that need a DOM opt in with a per-file docblock.
// e2e/ is Playwright's; Vitest must not try to run browser specs.
include: ['tests/**/*.test.js'],
exclude: ['e2e/**', 'node_modules/**', 'build/**'],
// SvelteKit resolves $lib during a build, not under Vitest, so the test
// run needs the same mapping stated explicitly. It points at the same
// directory the framework uses, so there is one meaning of $lib.
alias: {
$lib: fileURLToPath(new URL('./src/lib', import.meta.url))
}
}
});