testVitestInNode
Vitest: expect, vi and diffs in Node, nothing installed, results cached by hash.
import { setUp } from "#codebase/tcmts/cli/test/e2e/vitest"; import assert from "node:assert/strict"; export const testVitestInNode = () => { const { run, tcm, write } = setUp(); write( "m.ts", `// tcm: namespace m\nimport { expect, vi } from "vitest";\n\nexport const double = (n: number): number => n * 2;\n\n` + `export const testDouble = () => {\n expect(double(2)).toBe(4);\n};\n\n` + `export const testMocks = () => {\n const f = vi.fn<(x: number) => number>((x) => x + 1);\n f(1);\n expect(f).toHaveBeenCalledWith(1);\n};\n\n` + `export const testFails = () => {\n console.log("about to fail");\n expect({ a: double(1) }).toEqual({ a: 3 });\n};\n`, ); tcm("add", "m.ts"); const r = run("test", "m"); assert.equal(r.status, 1); assert.match(r.out, /✓ m\.testDouble/); assert.match(r.out, /✓ m\.testMocks/); assert.match( r.out, /✗ m\.testFails[\s\S]*expected \{ a: 2 \} to deeply equal \{ a: 3 \}[\s\S]*- {3}"a": 3,[\s\S]*\+ {3}"a": 2,[\s\S]*│ about to fail/, "Vitest's message, its diff, and the test's output", ); assert.match(run("test", "m").out, /2 passed, 1 failed \(2 cached\)/); assert.match( tcm("packages"), /vitest\s+5\s+5\.\d+\.\d+/, "the test framework is pinned like any package", ); }