Files
bot-agents/.agents/memory/tests-layout-vitest.md
T
2026-10-17 18:12:47 +09:00

1.9 KiB

description
description
Vitest via vp test; unit tests sit next to code as *.test.ts, regression/integration tests in tests/ via the public entry (through its

Decided 2026-10-14 for all repos.

  • Runner: Vitest through vp test. Import test APIs from vite-plus/test (describe, expect, it).
  • Unit tests sit next to the code: src/foo/bar.ts is tested in src/foo/bar.test.ts. Vitest's default include finds them; no test config needed. Packages publish only dist/, so colocated tests cost nothing in the tarball.
  • Regression and integration tests live in the top-level tests/ folder and use only the public entry point, imported through its # alias (e.g. #plugin for ./src/plugin/index.ts), never internals and never ../, which is banned in every file. vp test tests runs just these (imports-aliases-barrels). In bot-agents, tests/ imports only #testing (./src/testing/index.ts), plain helpers that import no source module.
  • No in-source tests (import.meta.vitest).
  • scripts/ gets no tests (2026-10-15): it is repo tooling, not production code (project-lint.ts, protect-source.sh).
  • Test files follow every lint rule; no relaxed overrides for tests.

Migrating Deno tests

Deno.test suites were converted by a codemod (~/.local/share/deno-migration/src/convert.ts on the user's machine), then its TODOs finished by hand. Watch for:

  • @std/assert → expect (assertEquals → toStrictEqual or toBe, assertThrows → toThrow, assertRejects → rejects.toThrow);
  • Deno.* file, env, and process APIs → node:fs, process.env, node:child_process;
  • t.step → nested describe/it;
  • sanitizer options, which Vitest doesn't have.

A migration PR must keep every test case; a dropped case is lost coverage. Tests must pass locally before any push.