Skip to main content
meow has a test runner built in. Each test file runs in its own deterministic V8 isolate, so suites can’t leak state into each other and every run is reproducible by construction.

Writing tests

Import the API from the meow:test built-in module. There’s nothing to install.
math.test.ts

Discovery

meow test walks the project and runs every file whose name ends in .test. or .spec. with a JS/TS extension (.ts, .tsx, .js, .jsx, .mts, .mjs, .cts, .cjs). It skips node_modules, target, vendor, and hidden directories.

Matchers

The expect() API covers the essentials, each with a .not inverse:

Output

A failure shows the assertion and the first stack line, and the runner exits non-zero:

Determinism is the default

Tests always run in a deterministic strict-web isolate, no matter your project mode. The clock is frozen, randomness is seeded, and the timezone is pinned — so time- and random-dependent tests are stable instead of flaky. If a test genuinely needs real time or host access, that’s a deliberate grant, not the default.
Because each file gets a fresh isolate, there’s no shared global state to reset between files and no cross-test contamination.

The meow:test API

Full type signatures for test() and expect().