mike/frontend/vitest.config.mts

46 lines
1.9 KiB
TypeScript
Raw Permalink Normal View History

test: component and hook unit tests for the web app Ported from the amal66 fork (index: Open-Legal-Products/mike#205), adapted to this repo's frontend/ layout and current component behavior. Adds the jsdom + testing-library harness on top of the existing vitest setup: vitest.config.mts (jsdom environment, @/ alias mirroring tsconfig paths, dummy Supabase env for modules that build a client at import time) and vitest.setup.ts (jest-dom matchers). New devDependencies: jsdom, @testing-library/react, @testing-library/jest-dom, @testing-library/user-event, @vitejs/plugin-react. Ported suites (30 new tests): - FileTypeIcon.test.tsx (11) — fileTypeKind mapping + icon rendering - TRTable.test.tsx (1) — header/row render smoke test; the fork's ARIA role assertions (table/columnheader, "Tabular review" label) target fork-only markup — this repo's grid is div-based, so the test asserts rendered content instead - button.test.tsx (4), pill-button.test.tsx (8), cite-button.test.tsx (3) - useSmoothedReveal.test.ts (3) — passes against this repo's early-return snap behavior unchanged Dropped (subjects don't exist here): - HistoryDropdown.test.tsx — no tr-chat-panel/HistoryDropdown component - applyAssistantStreamEvent.test.ts — no such module - useProjectsQuery/useTabularReviewsQuery/useWorkflowsQuery tests — react-query is fork-only - lib/toast.test.ts — no frontend/src/lib/toast.ts - useAssistantChat.parsers.test.ts — the parser helpers exist inside useAssistantChat.ts but are not exported, and the fork's extracted module doesn't exist here Verified: frontend npm test 38/38 passing (30 new + 8 pre-existing cn() utils tests); npx tsc --noEmit clean. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-20 10:50:11 -07:00
import { fileURLToPath } from "node:url";
import react from "@vitejs/plugin-react";
import { defineConfig } from "vitest/config";
const resolvePath = (relative: string) =>
fileURLToPath(new URL(relative, import.meta.url));
export default defineConfig({
plugins: [react()],
resolve: {
// Mirror the `@/*` path alias from tsconfig.json so unit tests resolve
// the same module specifiers the app uses.
alias: [
{
find: /^@\/(.*)$/,
replacement: resolvePath("./src/$1"),
},
],
},
test: {
globals: true,
environment: "jsdom",
setupFiles: ["./vitest.setup.ts"],
// app/lib/supabase.ts creates its client at module load, so any
// component whose import graph reaches it needs these set. Dummy
// values — unit tests never talk to Supabase.
env: {
NEXT_PUBLIC_SUPABASE_URL: "http://localhost:54321",
NEXT_PUBLIC_SUPABASE_PUBLISHABLE_DEFAULT_KEY: "test-anon-key",
},
// jsdom 27's CSS-color parser (@asamuzakjp/css-color) is CJS but
// require()s the ESM-only @csstools/css-calc. That require() happens
// in the worker process while the jsdom environment boots — before
// Vite's transform pipeline is involved — so deps.inline can't fix it.
// Instead, let Node itself handle require(esm): default on >=22.12,
// and enabled by this (there harmless) flag on 22.022.11.
execArgv: ["--experimental-require-module"],
// Unit tests only. Keep any Playwright e2e specs (*.spec.ts) out.
include: ["src/**/*.test.{ts,tsx}"],
exclude: ["node_modules/**", "e2e/**", "**/*.spec.ts"],
// Generous timeouts to absorb cold-start jsdom + transform latency on CI.
testTimeout: 20000,
hookTimeout: 20000,
},
});