Skip to main content

Setup

caution

jest-extended only supports Jest version 27.2.5 and newer. If you're using an older version of Jest, use 1.2.1.

Create a setup script with the following:

testSetup.js
// add all jest-extended matchers
import * as matchers from 'jest-extended';
expect.extend(matchers);

// or just add specific matchers
import { toBeArray, toBeSealed } from 'jest-extended';
expect.extend({ toBeArray, toBeSealed });

Add your setup script to your Jest setupFilesAfterEnv configuration. See for help

package.json
"jest": {
"setupFilesAfterEnv": ["./testSetup.js"]
}

To automatically extend expect with all matchers, you can use

package.json
"jest": {
"setupFilesAfterEnv": ["jest-extended/all"]
}

Use with vitest

jest-extended works with vitest because their expect.extend API is compatible. In your setup script:

testSetup.js
import { expect } from 'vitest';
import * as matchers from 'jest-extended';
expect.extend(matchers);

Add this setup script to your vitest.config.js:

vitest.config.js
export default defineConfig({
test: {
setupFiles: ['./testSetup.js'],
},
});

Vitest TypeScript types setup

To use Vitest >= 0.31.0 with TypeScript, create a file named jest-extended.d.ts in your source directory with the content below.

export interface CustomMatchers<R> extends Record<string, any> {
toHaveBeenCalledAfter(
mock: jest.MockInstance<any, any[]> | import('vitest').MockInstance<any, any[]>,
failIfNoFirstInvocation: boolean,
): R;

toHaveBeenCalledBefore(
mock: jest.MockInstance<any, any[]> | import('vitest').MockInstance<any, any[]>,
failIfNoSecondInvocation: boolean,
): R;

toHaveBeenCalledExactlyOnceWith(...args: unknown[]): R;
}

declare namespace jest {
interface Matchers<R> {
toHaveBeenCalledAfter(
mock: jest.MockInstance<any, any[]> | import('vitest').MockInstance<any, any[]>,
failIfNoFirstInvocation?: boolean,
): R;

toHaveBeenCalledBefore(
mock: jest.MockInstance<any, any[]> | import('vitest').MockInstance<any, any[]>,
failIfNoSecondInvocation?: boolean,
): R;
}
}

import 'vitest';
declare module 'vitest' {
interface Assertion<T = any> extends CustomMatchers<T> {}
}