interface
test.Matchers
interface Matchers<T = unknown>
Extend this interface with declaration merging to add type support for custom matchers.
// my_modules.d.ts
interface MyCustomMatchers {
toBeWithinRange(floor: number, ceiling: number): any;
}
declare module "bun:test" {
interface Matchers<T> extends MyCustomMatchers {}
interface AsymmetricMatchers extends MyCustomMatchers {}
}- fail: (message?: string) => void
Assertion which fails.
expect().fail(); expect().fail("message is optional"); expect().not.fail(); expect().not.fail("hi"); - pass: (message?: string) => void
Assertion which passes.
expect().pass(); expect().pass("message is optional"); expect().not.pass(); expect().not.pass("hi"); - ...expected: unknown[]): void;
Ensure that a mock function is called with specific arguments for the last call.
- n: number,...expected: unknown[]): void;
Ensure that a mock function is called with specific arguments for the nth call.
- toBe(expected: T): void;
Asserts that a value equals what is expected.
- For non-primitive values, like objects and arrays, use
toEqual()instead. - For floating-point numbers, use
toBeCloseTo()instead.
@param expectedthe expected value
expect(100 + 23).toBe(123); expect("d" + "og").toBe("dog"); expect([123]).toBe([123]); // fail, use toEqual() expect(3 + 0.14).toBe(3.14); // fail, use toBeCloseTo() // TypeScript errors: expect("hello").toBe(3.14); // typescript error + fail expect("hello").toBe<number>(3.14); // no typescript error, but still fails - For non-primitive values, like objects and arrays, use
Asserts that a value is an
array.expect([1]).toBeArray(); expect(new Array(1)).toBeArray(); expect({}).not.toBeArray();expect([]).toBeArrayOfSize(0); expect([1]).toBeArrayOfSize(1); expect(new Array(1)).toBeArrayOfSize(1); expect({}).not.toBeArrayOfSize(0);Asserts that a value is a
boolean.expect(true).toBeBoolean(); expect(false).toBeBoolean(); expect(null).not.toBeBoolean(); expect(0).not.toBeBoolean();Ensures that a mock function is called.
- expected: number): void;
Ensures that a mock function is called an exact number of times.
- ...expected: unknown[]): void;
Ensure that a mock function is called with specific arguments.
- expected: number,numDigits?: number): void;
Asserts that a value is close to the expected value, within floating point precision.
For example, the following fails because arithmetic on decimal (base 10) values often has rounding errors in limited precision binary (base 2) representation.
@param expectedthe expected value
@param numDigitsthe number of digits to check after the decimal point. Default is
2expect(0.2 + 0.1).toBe(0.3); // fails Use `toBeCloseTo` to compare floating point numbers for approximate equality. Asserts that a value is a
Dateobject.To check if a date is valid, use
toBeValidDate()instead.expect(new Date()).toBeDate(); expect(new Date(null)).toBeDate(); expect("2020-03-01").not.toBeDate();Asserts that a value is defined (that is, not
undefined).expect(true).toBeDefined(); expect(undefined).toBeDefined(); // failAsserts that a value is empty.
expect("").toBeEmpty(); expect([]).toBeEmpty(); expect({}).toBeEmpty(); expect(new Set()).toBeEmpty();Asserts that a value is an empty
object.expect({}).toBeEmptyObject(); expect({ a: 'hello' }).not.toBeEmptyObject();Asserts that a number is even.
expect(2).toBeEven(); expect(1).not.toBeEven();Asserts that a value is
false.expect(false).toBeFalse(); expect(true).not.toBeFalse(); expect(0).not.toBeFalse();Asserts that a value is "falsy".
To assert that a value equals
false, usetoBe(false)instead.expect(false).toBeFalsy(); expect(0).toBeFalsy(); expect("").toBeFalsy();Asserts that a value is a
number, and is notNaNorInfinity.expect(1).toBeFinite(); expect(3.14).toBeFinite(); expect(NaN).not.toBeFinite(); expect(Infinity).not.toBeFinite();Asserts that a value is a
function.expect(() => {}).toBeFunction();- expected: number | bigint): void;
Asserts that a value is a
numberand is greater than the expected value.@param expectedthe expected number
expect(1).toBeGreaterThan(0); expect(3.14).toBeGreaterThan(3); expect(9).toBeGreaterThan(9); // fail - expected: number | bigint): void;
Asserts that a value is a
numberand is greater than or equal to the expected value.@param expectedthe expected number
expect(1).toBeGreaterThanOrEqual(0); expect(3.14).toBeGreaterThanOrEqual(3); expect(9).toBeGreaterThanOrEqual(9); - value: unknown): void;
Asserts that a value is an instance of the given class or constructor.
expect([]).toBeInstanceOf(Array); expect(null).toBeInstanceOf(Array); // fail Asserts that a value is a
number, and is an integer.expect(1).toBeInteger(); expect(3.14).not.toBeInteger(); expect(NaN).not.toBeInteger();- expected: number | bigint): void;
Asserts that a value is a
numberand is less than the expected value.@param expectedthe expected number
expect(-1).toBeLessThan(0); expect(3).toBeLessThan(3.14); expect(9).toBeLessThan(9); // fail - expected: number | bigint): void;
Asserts that a value is a
numberand is less than or equal to the expected value.@param expectedthe expected number
expect(-1).toBeLessThanOrEqual(0); expect(3).toBeLessThanOrEqual(3.14); expect(9).toBeLessThanOrEqual(9); Asserts that a value is
NaN.Same as using
Number.isNaN().expect(NaN).toBeNaN(); expect(Infinity).toBeNaN(); // fail expect("notanumber").toBeNaN(); // failAsserts that a value is a negative
number.expect(-3.14).toBeNegative(); expect(1).not.toBeNegative(); expect(NaN).not.toBeNegative();Asserts that a value is
nullorundefined.expect(null).toBeNil(); expect(undefined).toBeNil();Asserts that a value is
null.expect(null).toBeNull(); expect(undefined).toBeNull(); // failAsserts that a value is a
number.expect(1).toBeNumber(); expect(3.14).toBeNumber(); expect(NaN).toBeNumber(); expect(BigInt(1)).not.toBeNumber();Asserts that a value is an
object.expect({}).toBeObject(); expect("notAnObject").not.toBeObject(); expect(NaN).not.toBeObject();Asserts that a number is odd.
expect(1).toBeOdd(); expect(2).not.toBeOdd();- expected: Iterable<T>): void;
Asserts that the value is deeply equal to an element in the expected array.
The value must be an array or iterable, which includes strings.
@param expectedthe expected value
expect(1).toBeOneOf([1,2,3]); expect("foo").toBeOneOf(["foo", "bar"]); expect(true).toBeOneOf(new Set([true])); Asserts that a value is a positive
number.expect(1).toBePositive(); expect(-3.14).not.toBePositive(); expect(NaN).not.toBePositive();Asserts that a value is a
string.expect("foo").toBeString(); expect(new String("bar")).toBeString(); expect(123).not.toBeString();Asserts that a value is a
symbol.expect(Symbol("foo")).toBeSymbol(); expect("foo").not.toBeSymbol();Asserts that a value is
true.expect(true).toBeTrue(); expect(false).not.toBeTrue(); expect(1).not.toBeTrue();Asserts that a value is "truthy".
To assert that a value equals
true, usetoBe(true)instead.expect(true).toBeTruthy(); expect(1).toBeTruthy(); expect({}).toBeTruthy();- type: 'string' | 'number' | 'bigint' | 'boolean' | 'symbol' | 'undefined' | 'object' | 'function'): void;
Asserts that a value matches a specific type.
expect(1).toBeTypeOf("number"); expect("hello").toBeTypeOf("string"); expect([]).not.toBeTypeOf("boolean"); Asserts that a value is
undefined.expect(undefined).toBeUndefined(); expect(null).toBeUndefined(); // failAsserts that a value is a valid
Dateobject.expect(new Date()).toBeValidDate(); expect(new Date(null)).not.toBeValidDate(); expect("2020-03-01").not.toBeValidDate();- start: number,end: number): void;
Asserts that a value is a number between a start and end value.
@param startthe start number (inclusive)
@param endthe end number (exclusive)
- expected: T extends Iterable<U, any, any> ? U : T): void;
Asserts that a value contains what is expected.
The value must be an array or iterable, which includes strings.
@param expectedthe expected value
expect([1, 2, 3]).toContain(1); expect(new Set([true])).toContain(true); expect("hello").toContain("o"); - expected: IfNeverThenElse<keyof T, PropertyKey>[]): void;
Asserts that an
objectcontains all the provided keys.The value must be an object.
@param expectedthe expected value
expect({ a: 'hello', b: 'world' }).toContainAllKeys(['a','b']); expect({ a: 'hello', b: 'world' }).toContainAllKeys(['b','a']); expect({ 1: 'hello', b: 'world' }).toContainAllKeys([1,'b']); expect({ a: 'hello', b: 'world' }).not.toContainAllKeys(['c']); expect({ a: 'hello', b: 'world' }).not.toContainAllKeys(['a']); - expected: unknown[]): void;
Asserts that an
objectcontains all the provided values.The value must be an object.
@param expectedthe expected value
const o = { a: 'foo', b: 'bar', c: 'baz' }; expect(o).toContainAllValues(['foo', 'bar', 'baz']); expect(o).toContainAllValues(['baz', 'bar', 'foo']); expect(o).not.toContainAllValues(['bar', 'foo']); - expected: IfNeverThenElse<keyof T, PropertyKey>[]): void;
Asserts that an
objectcontains at least one of the provided keys.The value must be an object.
@param expectedthe expected value
expect({ a: 'hello', b: 'world' }).toContainAnyKeys(['a']); expect({ a: 'hello', b: 'world' }).toContainAnyKeys(['b']); expect({ a: 'hello', b: 'world' }).toContainAnyKeys(['b', 'c']); expect({ a: 'hello', b: 'world' }).not.toContainAnyKeys(['c']); - expected: unknown[]): void;
Asserts that an
objectcontains any of the provided values.The value must be an object.
@param expectedthe expected value
const o = { a: 'foo', b: 'bar', c: 'baz' }; expect(o).toContainAnyValues(['qux', 'foo']); expect(o).toContainAnyValues(['qux', 'bar']); expect(o).toContainAnyValues(['qux', 'baz']); expect(o).not.toContainAnyValues(['qux']); - expected: T extends Iterable<U, any, any> ? U : T): void;
Asserts that a value contains and equals what is expected.
This matcher performs a deep equality check on array members, rather than checking for object identity.
@param expectedthe expected value
expect([{ a: 1 }]).toContainEqual({ a: 1 }); expect([{ a: 1 }]).not.toContainEqual({ a: 2 }); - expected: IfNeverThenElse<keyof T, PropertyKey>): void;
Asserts that an
objectcontains a key.The value must be an object.
@param expectedthe expected value
expect({ a: 'foo', b: 'bar', c: 'baz' }).toContainKey('a'); expect({ a: 'foo', b: 'bar', c: 'baz' }).toContainKey('b'); expect({ a: 'foo', b: 'bar', c: 'baz' }).toContainKey('c'); expect({ a: 'foo', b: 'bar', c: 'baz' }).not.toContainKey('d'); - expected: IfNeverThenElse<keyof T, PropertyKey>[]): void;
Asserts that an
objectcontains all the provided keys.@param expectedthe expected value
expect({ a: 'foo', b: 'bar', c: 'baz' }).toContainKeys(['a', 'b']); expect({ a: 'foo', b: 'bar', c: 'baz' }).toContainKeys(['a', 'b', 'c']); expect({ a: 'foo', b: 'bar', c: 'baz' }).not.toContainKeys(['a', 'b', 'e']); - expected: unknown): void;
Asserts that an
objectcontains the provided value.This check is deep: it looks through child properties to find the expected value.
The input value must be an object.
@param expectedthe expected value
const shallow = { hello: "world" }; const deep = { message: shallow }; const deepArray = { message: [shallow] }; const o = { a: "foo", b: [1, "hello", true], c: "baz" }; expect(shallow).toContainValue("world"); expect({ foo: false }).toContainValue(false); expect(deep).toContainValue({ hello: "world" }); expect(deepArray).toContainValue([{ hello: "world" }]); expect(o).toContainValue("foo", "barr"); expect(o).toContainValue([1, "hello", true]); expect(o).not.toContainValue("qux"); // NOT expect(shallow).not.toContainValue("foo"); expect(deep).not.toContainValue({ foo: "bar" }); expect(deepArray).not.toContainValue([{ foo: "bar" }]); - expected: unknown[]): void;
Asserts that an
objectcontains the provided values.This is the same as toContainValue, but accepts an array of values instead.
The value must be an object.
@param expectedthe expected value
const o = { a: 'foo', b: 'bar', c: 'baz' }; expect(o).toContainValues(['foo']); expect(o).toContainValues(['baz', 'bar']); expect(o).not.toContainValues(['qux', 'foo']); - @param expected
the string to end with
- expected: string): void;
Asserts that a value is equal to the expected string, ignoring any whitespace.
@param expectedthe expected string
expect(" foo ").toEqualIgnoringWhitespace("foo"); expect("bar").toEqualIgnoringWhitespace(" bar "); Ensures that a mock function is called.
- expected: number): void;
Ensures that a mock function is called an exact number of times.
- ...expected: unknown[]): void;
Ensure that a mock function is called with specific arguments.
- ...expected: unknown[]): void;
Ensure that a mock function is called with specific arguments for the last call.
- n: number,...expected: unknown[]): void;
Ensure that a mock function is called with specific arguments for the nth call.
- expected: unknown): void;
Ensures that a mock function has returned a specific value on its last invocation. This matcher uses deep equality, like toEqual(), and supports asymmetric matchers.
- length: number): void;
Asserts that a value has a
.lengthproperty that is equal to the expected length.@param lengththe expected length
expect([]).toHaveLength(0); expect("hello").toHaveLength(5); - n: number,expected: unknown): void;
Ensures that a mock function has returned a specific value on the nth invocation. This matcher uses deep equality, like toEqual(), and supports asymmetric matchers.
@param nThe 1-based index of the function call
@param expectedThe expected return value
- keyPath: string | number | string | number[],value?: unknown): void;
Asserts that a value has a property with the expected name, and value if provided.
@param keyPaththe expected property name or path, or an index
@param valuethe expected property value, if provided
expect(new Set()).toHaveProperty("size"); expect(new Uint8Array()).toHaveProperty("byteLength", 0); expect({ kitchen: { area: 20 }}).toHaveProperty("kitchen.area", 20); expect({ kitchen: { area: 20 }}).toHaveProperty(["kitchen", "area"], 20); Ensures that a mock function has returned successfully at least once.
An unfulfilled promise counts as a failure, as does a thrown error.
- times: number): void;
Ensures that a mock function has returned successfully
timestimes.An unfulfilled promise counts as a failure, as does a thrown error.
- expected: unknown): void;
Ensures that a mock function has returned a specific value. This matcher uses deep equality, like toEqual(), and supports asymmetric matchers.
- expected: string): void;
Asserts that a value includes a
string.For non-string values, use
toContain()instead.@param expectedthe expected substring
- expected: string,times: number): void;
Asserts that a value includes a
stringthe given number of times.@param expectedthe expected substring
@param timesthe number of times the substring should occur
- expected: string | RegExp): void;
Asserts that a value matches a regular expression or includes a substring.
@param expectedthe expected substring or pattern.
expect("dog").toMatch(/dog/); expect("dog").toMatch("og"); - value?: string): void;
Asserts that a value matches the most recent inline snapshot.
@param valueThe latest automatically-updated snapshot value.
expect("Hello").toMatchInlineSnapshot(); expect("Hello").toMatchInlineSnapshot(`"Hello"`);propertyMatchers?: object,value?: string): void;Asserts that a value matches the most recent inline snapshot.
@param propertyMatchersObject containing properties to match against the value.
@param valueThe latest automatically-updated snapshot value.
expect({ c: new Date() }).toMatchInlineSnapshot({ c: expect.any(Date) }); expect({ c: new Date() }).toMatchInlineSnapshot({ c: expect.any(Date) }, ` { "v": Any<Date>, } `); - @param subset
Subset of properties to match with.
expect({ a: 1, b: 2 }).toMatchObject({ b: 2 }); expect({ c: new Date(), d: 2 }).toMatchObject({ d: 2 }); - @param hint
Hint used to identify the snapshot in the snapshot file.
expect([1, 2, 3]).toMatchSnapshot('hint message');propertyMatchers?: object,hint?: string): void;Asserts that a value matches the most recent snapshot.
@param propertyMatchersObject containing properties to match against the value.
@param hintHint used to identify the snapshot in the snapshot file.
expect([1, 2, 3]).toMatchSnapshot(); expect({ a: 1, b: 2 }).toMatchSnapshot({ a: 1 }); expect({ c: new Date() }).toMatchSnapshot({ c: expect.any(Date) }); - predicate: (value: T) => boolean): void;
Asserts that a value satisfies a custom condition.
@param predicatea function that receives the value passed to
expectand returns a booleanexpect(1).toSatisfy((val) => val > 0); expect("foo").toSatisfy((val) => val === "foo"); expect("bar").not.toSatisfy((val) => val === "bun"); - @param expected
the string to start with
- expected: T): void;
Asserts that a value is deeply and strictly equal to what is expected.
There are two key differences from
toEqual():- It checks that the class is the same.
- It checks that
undefinedvalues match as well.
@param expectedthe expected value
class Dog { type = "dog"; } const actual = new Dog(); expect(actual).toStrictEqual(new Dog()); expect(actual).toStrictEqual({ type: "dog" }); // fail - expected?: unknown): void;
Asserts that a function throws an error.
- If expected is a
stringorRegExp, it checks themessageproperty. - If expected is an
Errorobject, it checks thenameandmessageproperties. - If expected is an
Errorconstructor, it checks the class of theError. - If expected is not provided, it checks that anything was thrown.
@param expectedthe expected error, error message, or error pattern
function fail() { throw new Error("Oops!"); } expect(fail).toThrow("Oops!"); expect(fail).toThrow(/oops/i); expect(fail).toThrow(Error); expect(fail).toThrow(); - If expected is a
- expected?: unknown): void;
Asserts that a function throws an error.
- If expected is a
stringorRegExp, it checks themessageproperty. - If expected is an
Errorobject, it checks thenameandmessageproperties. - If expected is an
Errorconstructor, it checks the class of theError. - If expected is not provided, it checks that anything was thrown.
@param expectedthe expected error, error message, or error pattern
function fail() { throw new Error("Oops!"); } expect(fail).toThrowError("Oops!"); expect(fail).toThrowError(/oops/i); expect(fail).toThrowError(Error); expect(fail).toThrowError(); - If expected is a
- value?: string): void;
Asserts that a function throws an error matching the most recent snapshot.
@param valueThe latest automatically-updated snapshot value.
function fail() { throw new Error("Oops!"); } expect(fail).toThrowErrorMatchingInlineSnapshot(); expect(fail).toThrowErrorMatchingInlineSnapshot(`"Oops!"`); - hint?: string): void;
Asserts that a function throws an error matching the most recent snapshot.
@param hintHint used to identify the snapshot in the snapshot file.
function fail() { throw new Error("Oops!"); } expect(fail).toThrowErrorMatchingSnapshot(); expect(fail).toThrowErrorMatchingSnapshot("This one should say Oops!");