* Restructure * Update nav * Reorg * Reshuffle ecosystem pages * Split up runtime/runtime * Back to runtime/index * Fix issue * Split up runtime/index * Add Writing Tests page * Prettier matcher table * More updates
6.7 KiB
Define tests with a Jest-like API imported from the built-in bun:test module. Long term, Bun aims for complete Jest compatibility; at the moment, a limited set of expect matchers are supported.
Basic usage
To define a simple test:
import { expect, test } from "bun:test";
test("2 + 2", () => {
expect(2 + 2).toBe(4);
});
Tests can be grouped into suites with describe.
import { expect, test, describe } from "bun:test";
describe("arithmetic", () => {
test("2 + 2", () => {
expect(2 + 2).toBe(4);
});
test("2 * 2", () => {
expect(2 * 2).toBe(4);
});
});
Tests can be async.
import { expect, test } from "bun:test";
test("2 * 2", async () => {
const result = await Promise.resolve(2 * 2);
expect(result).toEqual(4);
});
Alternatively, use the done callback to signal completion. If you include the done callback as a parameter in your test definition, you must call it or the test will hang.
import { expect, test } from "bun:test";
test("2 * 2", done => {
Promise.resolve(2 * 2).then(result => {
expect(result).toEqual(4);
done();
});
});
Skip individual tests with test.skip.
import { expect, test } from "bun:test";
test.skip("wat", () => {
// TODO: fix this
expect(0.1 + 0.2).toEqual(0.3);
});
Setup and teardown
Perform per-test setup and teardown logic with beforeEach and afterEach.
import { expect, test } from "bun:test";
beforeEach(() => {
console.log("running test.");
});
afterEach(() => {
console.log("done with test.");
});
// tests...
Perform per-scope setup and teardown logic with beforeAll and afterAll. At the top-level, the scope is the current file; in a describe block, the scope is the block itself.
import { expect, test, beforeAll, afterAll } from "bun:test";
let db: Database;
beforeAll(() => {
// connect to database
db = initializeDatabase();
});
afterAll(() => {
// close connection
db.close();
});
// tests...
Matchers
Bun implements the following matchers. Full Jest compatibility is on the roadmap; track progress here.
{% table %}
- 🟢
.not
- 🟢
.toBe()
- 🔴
.extend
- 🔴
.any()
- 🟢
.toBeInstanceOf()(Bun v0.5.8+)
- 🟢
.toMatchSnapshot()(Bun v0.5.8+)
{% /table %}