jest-puppeteer is a Jest preset that enables end-to-end testing with Puppeteer. It provides a straightforward API for launching browser instances, interacting with web pages, and testing web applications with full automation capabilities. The preset automatically sets up the testing environment with browser globals and enhanced assertion matchers.
npm install --save-dev jest-puppeteer puppeteer jest// Global variables automatically available in tests
import "jest-puppeteer";
// For type definitions
import type { Browser, Page, Frame, BrowserContext } from "puppeteer";Jest configuration:
{
"preset": "jest-puppeteer"
}import "expect-puppeteer";
describe("Google", () => {
beforeAll(async () => {
await page.goto("https://google.com");
});
it('should display "google" text on page', async () => {
await expect(page).toMatchTextContent("google");
});
it("should click search button", async () => {
await expect(page).toClick("button", { text: "Google Search" });
});
});jest-puppeteer is built around several key components:
browser, page, context, and jestPuppeteer globals for all testsCore browser automation objects automatically available in all tests.
// Global browser instance
declare var browser: Browser;
// Global page instance
declare var page: Page;
// Global browser context
declare var context: BrowserContext;
// Global Puppeteer configuration
declare var puppeteerConfig: JestPuppeteerConfig;
// Global jest-puppeteer utilities
declare var jestPuppeteer: {
debug(): Promise<void>;
resetPage(): Promise<void>;
resetBrowser(): Promise<void>;
};Jest preset that automatically configures the testing environment for Puppeteer.
interface JestPreset {
globalSetup: string;
globalTeardown: string;
testEnvironment: string;
setupFilesAfterEnv: string[];
}Comprehensive configuration system for customizing browser behavior and test execution.
interface JestPuppeteerConfig {
connect?: ConnectOptions;
launch?: PuppeteerLaunchOptions;
server?: JestDevServerConfig | JestDevServerConfig[];
browserPerWorker?: boolean;
browserContext?: "default" | "incognito";
exitOnPageError?: boolean;
runBeforeUnloadOnClose?: boolean;
}Specialized assertion matchers for browser testing, automatically included with the preset.
interface PuppeteerMatchers {
toClick(selector: string | Selector, options?: ToClickOptions): Promise<void>;
toFill(selector: string | Selector, value: string, options?: ToFillOptions): Promise<void>;
toMatchElement(selector: string | Selector, options?: ToMatchElementOptions): Promise<ElementHandle<Element>>;
toMatchTextContent(matcher: string | RegExp, options?: MatchTextContentOptions): Promise<void>;
}Element Interaction Content Matching Form Handling Dialog Management
interface JestPuppeteerConfig {
connect?: ConnectOptions;
launch?: PuppeteerLaunchOptions;
server?: JestDevServerConfig | JestDevServerConfig[];
browserPerWorker?: boolean;
browserContext?: "default" | "incognito";
exitOnPageError?: boolean;
runBeforeUnloadOnClose?: boolean;
}
interface JestDevServerConfig {
command: string;
port: number;
launchTimeout?: number;
debug?: boolean;
}
interface ConnectOptions {
browserWSEndpoint?: string;
ignoreHTTPSErrors?: boolean;
defaultViewport?: Viewport | null;
slowMo?: number;
}
interface PuppeteerLaunchOptions {
headless?: boolean | "new";
args?: string[];
ignoreDefaultArgs?: boolean | string[];
handleSIGINT?: boolean;
handleSIGTERM?: boolean;
handleSIGHUP?: boolean;
timeout?: number;
dumpio?: boolean;
userDataDir?: string;
env?: Record<string, string | undefined>;
devtools?: boolean;
pipe?: boolean;
product?: "chrome" | "firefox";
extraPrefsFirefox?: Record<string, unknown>;
slowMo?: number;
}