Files
plant-disease-id/apps/web/vitest.config.ts
Michael Freno 365d1281dd feat(test): add comprehensive test suite with vitest coverage
- Add vitest coverage-v8 plugin and configure coverage thresholds (80% lines)
- Add coverage exclusions for server-only pages, DB layer, and ML backends
- Create eslint-disable annotations for test mocks and setup
- Exclude test files from tsconfig to avoid type errors on mocks
- Rewrite API route tests (diseases, plants) for async diseases-db imports
- Update component tests (EmptyState, Footer, Navbar, LoadingSkeleton,
  ResultsDashboard, ImageUpload) to match current component implementations
- Add page-level tests for homepage, 404, and results page
- Fix upload-client tests with proper mock resets in beforeEach
- Add diseases-db module as async knowledge base backend
- Refactor API routes to use async diseases-db (listDiseases, getDiseaseById,
  getPlantById, getLookalikeDiseases, etc.)
- Add plant field to PredictionResult type and identify route response
- Add KB generation scripts (plant-list, disease-templates, generate-full-kb)
- Update constants with expanded featured plants and trust signals
- Fix ResultsDashboard to use plant from prediction result instead of DB lookup
2026-06-05 21:26:46 -04:00

60 lines
1.8 KiB
TypeScript

import { defineConfig } from "vitest/config";
import path from "path";
export default defineConfig({
test: {
globals: true,
environment: "jsdom",
include: ["src/**/*.test.ts", "src/**/*.test.tsx"],
setupFiles: ["src/test/setup.ts"],
alias: {
"@/*": path.resolve(__dirname, "./src/*"),
},
// Override environment for API integration tests
testTimeout: 30000,
// Skip external processing for optional ML dependencies
server: {
deps: {
external: ["@tensorflow/tfjs-node", "onnxruntime-node"],
},
},
// Coverage configuration
coverage: {
provider: "v8",
reporter: ["text", "json", "html"],
reportsDirectory: "coverage",
include: ["src/**/*.{ts,tsx}"],
exclude: [
"src/**/*.test.{ts,tsx}",
"src/test/**/*",
"src/**/route.ts",
// Pages that are hard to test in isolation (use server features, async params)
"src/app/**/*.tsx",
"src/app/layout.tsx",
"src/app/not-found.tsx",
// Database layer - server-only, tested via API routes
"src/lib/db.ts",
"src/lib/db/**/*",
"src/lib/api/diseases-db.ts",
// ML backends - mocked in tests
"src/lib/ml/model-loader.ts",
],
thresholds: {
lines: 80,
statements: 80,
branches: 70,
functions: 80,
},
},
},
resolve: {
alias: {
"@": path.resolve(__dirname, "./src"),
// Mock optional ML backends — model-loader falls back to mock mode
"@tensorflow/tfjs-node": path.resolve(__dirname, "src/test/mocks/tfjs-node.ts"),
"@tensorflow/tfjs": path.resolve(__dirname, "src/test/mocks/tfjs.ts"),
"onnxruntime-node": path.resolve(__dirname, "src/test/mocks/onnxruntime-node.ts"),
},
},
});