On this page
@std/expect
Overview Jump to heading
This module provides Jest compatible expect assertion functionality.
import { expect } from "@std/expect";
const x = 6 * 7;
expect(x).toEqual(42);
expect(x).not.toEqual(0);
await expect(Promise.resolve(x)).resolves.toEqual(42);
Currently this module supports the following functions:
- Common matchers:
toBetoEqualtoStrictEqualtoMatchtoMatchObjecttoBeDefinedtoBeUndefinedtoBeNulltoBeNaNtoBeTruthytoBeFalsytoContaintoContainEqualtoHaveLengthtoBeGreaterThantoBeGreaterThanOrEqualtoBeLessThantoBeLessThanOrEqualtoBeCloseTotoBeInstanceOftoThrowtoHaveProperty
- Mock related matchers:
toHaveBeenCalledtoHaveBeenCalledTimestoHaveBeenCalledWithtoHaveBeenLastCalledWithtoHaveBeenNthCalledWithtoHaveReturnedtoHaveReturnedTimestoHaveReturnedWithtoHaveLastReturnedWithtoHaveNthReturnedWith
- Asymmetric matchers:
- Utilities:
expect.addSnapshotSerializerexpect.assertionsexpect.addEqualityTesterexpect.extendexpect.hasAssertions
Only these functions are still not available:
- Matchers:
toMatchSnapshottoMatchInlineSnapshottoThrowErrorMatchingSnapshottoThrowErrorMatchingInlineSnapshot
The tracking issue to add support for unsupported parts of the API is https://github.com/denoland/std/issues/3964.
This module is largely inspired by x/expect module by Allain Lalonde.
Add to your project Jump to heading
deno add jsr:@std/expect
See all symbols in @std/expect on
What is expect? Jump to heading
A Jest‑compatible fluent assertion API. Instead of standalone assert functions,
you write expectations like expect(value).toBe(1) and can chain modifiers like
.not, .resolves, and .rejects.
When to use @std/expect Jump to heading
If you prefer a Jest-like API for fluent, readable assertions with rich matchers, especially when migrating from Jest.
Examples Jump to heading
import { expect } from "@std/expect";
expect({ a: 1, b: 2 }).toMatchObject({ a: 1 });
await expect(Promise.resolve(42)).resolves.toBe(42);
expect([1, 2, 3]).toContain(2);
// Throwing and async rejections
expect(() => JSON.parse("{"))
.toThrow(SyntaxError);
await expect(Promise.reject(new Error("boom")))
.rejects.toThrow("boom");
// Close-to for floating point, regex matching
expect(0.1 + 0.2).toBeCloseTo(0.3, 15);
expect("hello world").toMatch(/world/);
// Using asymmetric matchers
expect({ id: 1, name: "Ada" })
.toEqual(expect.objectContaining({ name: expect.stringMatching(/^A/) }));
Use with Deno.test Jump to heading
import { expect } from "@std/expect";
Deno.test("basic expect", () => {
const value = 2 + 2;
expect(value).toBe(4);
});
For more information on testing in Deno, see the testing docs.
Tips Jump to heading
- Use
toEqualfor deep data comparisons andtoBefor identity. - Prefer
.resolves/.rejectshelpers for promises. - Prefer
.resolves/.rejectshelpers for promises. - Use
toStrictEqualfor stricter deep checks (no extra props, etc.). - Extend with custom matchers via
expect.extendwhen needed.