v5.0.0
Breaking: vitest-native assertions
Result exposes raw values for vitest expect() instead of custom assertion methods.
// Values — vitest native
expect(result.exitCode).toBe(0)
expect(result.status).toBe(201)
expect(result.stdout).toContain("Build completed")
expect(result.stderr).not.toContain("error")
// Files — accessor with {exists, content}
expect(result.file("dist/index.js").exists).toBe(true)
expect(result.file("dist/index.js").content).toContain("Hello")
// Grep — block-based scoped matching
import { grep } from "@jterrazz/test"
expect(grep(result.stdout, "unused-var.ts")).toContain("no-unused-vars")
// Response + Tables — kept custom (disk/DB access)
result.response.toMatchFile("expected.json")
await result.table("users").toMatch({ columns, rows })Migration from 4.x
result.exitCode.toBe(0)→expect(result.exitCode).toBe(0)result.stdout.toContain("x")→expect(result.stdout).toContain("x")result.file("p").toExist()→expect(result.file("p").exists).toBe(true)result.file("p").not.toExist()→expect(result.file("p").exists).toBe(false)result.file("p").toContain("x")→expect(result.file("p").content).toContain("x")- Custom assertion engine removed (BaseAssertion, ValueAssertion, etc.)