proby
v0.7.0
Published
Standard library test runner
Readme
proby
Test runner for JavaScript runtimes.
What is proby?
A cross-runtime test runner that automatically discovers and runs test files.
Works with both single repositories and monorepos. Uses @rcompat/test for
writing tests. Works consistently across Node, Deno, and Bun.
Installation
npm install probypnpm add probyyarn add probybun add probyYou also need to install @rcompat/test as a peer dependency:
npm install @rcompat/testUsage
Running tests
Run proby from your project root:
npx probyWriting tests
Create test files with .spec.ts or .spec.js extension in your src
directory:
// src/math.spec.ts
import test from "@rcompat/test";
test.case("addition", assert => {
assert(1 + 1).equals(2);
assert(2 + 2).equals(4);
});
test.case("multiplication", assert => {
assert(2 * 3).equals(6);
assert(4 * 5).equals(20);
});Test output
Proby displays colored output:
- Green
ofor passing tests - Red
xfor failing tests
oooooxoo
src/math.spec.ts division
expected 5
actual 4Project structure
Proby automatically detects your project structure:
Single repository:
my-project/
├── src/
│ ├── utils.ts
│ ├── utils.spec.ts # ← Test file
│ ├── math.ts
│ └── math.spec.ts # ← Test file
└── package.jsonMonorepo:
my-monorepo/
├── packages/
│ ├── core/
│ │ └── src/
│ │ ├── index.ts
│ │ └── index.spec.ts # ← Test file
│ └── utils/
│ └── src/
│ ├── helpers.ts
│ └── helpers.spec.ts # ← Test file
└── package.jsonnpm scripts
Add proby to your package.json:
{
"scripts": {
"test": "npx proby"
}
}Then run:
npm testTest file conventions
- Files must end with
.spec.tsor.spec.js - Files must be in the
srcdirectory (orpackages/*/srcfor monorepos) - Use
@rcompat/testto write tests
Examples
Basic assertions
import test from "@rcompat/test";
test.case("basic assertions", assert => {
// equality
assert(value).equals(expected);
// truthiness
assert(condition).true();
assert(condition).false();
// type checking
assert(value).type<string>();
// throws
assert(() => throwingFunction()).throws();
assert(() => safeFunction()).tries();
});Async tests
import test from "@rcompat/test";
test.case("async operations", async assert => {
const result = await fetchData();
assert(result.status).equals(200);
});Testing modules
// src/calculator.ts
export function add(a: number, b: number) {
return a + b;
}
// src/calculator.spec.ts
import test from "@rcompat/test";
import { add } from "./calculator.js";
test.case("add function", assert => {
assert(add(1, 2)).equals(3);
assert(add(-1, 1)).equals(0);
assert(add(0, 0)).equals(0);
});Cross-Runtime Compatibility
| Runtime | Supported | |---------|-----------| | Node.js | ✓ | | Deno | ✓ | | Bun | ✓ |
No configuration required — just run npx proby.
License
MIT
Contributing
See CONTRIBUTING.md in the repository root.
