| name | testing |
| description | Write TypeScript runtime and type tests |
Testing Skill
Write TypeScript runtime and type tests for this project.
Imports
import * as test from "bun:test"
Test Structure
Use test.it for individual tests and test.describe for grouping:
test.describe("MyModule", () => {
test.it("should do something", () => {
})
})
Never use test.test - always use test.it.
Assertion Formatting
Put each method call on a new line with 2-space indentation:
test.expect(value).toBe(expected)
test.expect(result).toEqual({ foo: "bar" })
test.expect(() => riskyOperation()).toThrow("error message")
Type Assertions with expect-type
Use expect-type for compile-time type checking. Inline types directly - no type aliases:
type.expectTypeOf(someValue).toMatchObjectType<ExpectedType>()
type.expectTypeOf<ActualType>().toMatchObjectType<ExpectedType>()
type.expectTypeOf<SubType>().toExtend<SuperType>()
Variable names
Avoid variable names that shadow imports. Use descriptive suffixes:
const test = Route.add("/test", Route.get(Route.text("test")))
const testRoute = Route.add("/test", Route.get(Route.text("test")))
describe() block
When testing multiple exported functions or logic, use describe() at the root:
// when testing a function, use its reference:
test.describe(PathPattern.parseSegment, () => {})
test.describe("Params", () => {})
Keep describe() blocks flat and never wrap them in describe(MODULE_NAME)
File Location
Co-locate tests with source files: Module.test.ts alongside Module.ts