Skip to main content
Version: v5

Testing with Jest

The AudioEye Accessibility Testing SDK Jest library lets you test rendered components for accessibility issues as part of your existing unit and integration test suite.

If you are new to the SDK, complete the entitlement-token and package-manager setup in getting started before installing the Jest package.

When to use Jest

Jest is a good fit when you want to:

  • catch accessibility issues while developing components
  • validate rendered output in unit or integration tests
  • test isolated UI states without launching a full browser
  • add accessibility assertions to an existing React Testing Library workflow

If you need to test full browser behavior such as routing, authentication, or multi-step flows, use Playwright or Cypress instead.

Prerequisites

Before you begin, make sure you have:

  • configured your entitlement token as described in getting started
  • installed Jest in your project
  • set up a DOM-based test environment when your tests render UI
  • installed any rendering utilities your app already uses, such as @testing-library/react
Browser-context limitations

The Jest SDK evaluates component markup in a test environment. Because Jest does not run in a real browser page, some rules that depend on full browser context, computed styles, layout, or runtime page behavior are not available here.

For more details, see About Our Rules.

Installation

Install the Jest SDK as a development dependency:

npm install -D @audioeye/testing-sdk-jest

Test environment setup

Most component tests should run in a DOM-capable environment such as jsdom.

A minimal Jest configuration looks like this:

jest.config.js
module.exports = {
testEnvironment: 'jsdom',
};

If you are using Jest 28 or later, make sure your project has configured the test environment correctly for that version of Jest. See the Jest documentation for details:

Your first accessibility test

The basic workflow is:

  1. render a component
  2. pass the rendered output to accessibility.evaluate(...)
  3. assert on the returned results

Here is a simple React example using React Testing Library:

import { accessibility } from '@audioeye/testing-sdk-jest';
import { render } from '@testing-library/react';
import React from 'react';

function Image({ altText }: { altText: string }) {
return <img src="/logo.png" alt={altText} />;
}

describe('Image', () => {
it('finds weak alt text', () => {
const results = accessibility.evaluate(render(<Image altText="image" />));

expect(results.resultCodes).toEqual(['Img_Name_WeakName']);
});

it('passes when alt text is descriptive', () => {
const results = accessibility.evaluate(render(<Image altText="The AudioEye company logo" />));

expect(results.resultCodes).toEqual([]);
});
});

Supported input types

For convenience, the Jest SDK accepts several common input types. This makes it easier to use with the testing tools you already have.

You can pass any of the following to accessibility.evaluate(...):

  • string
  • RenderResult
  • HTMLElement
  • DocumentFragment
  • JQuery<HTMLElement>

Common usage patterns

Using a RenderResult

If you already use React Testing Library, passing the full render result is often the shortest option.

import { accessibility } from '@audioeye/testing-sdk-jest';
import { render } from '@testing-library/react';
import React from 'react';

import { Image } from './image';

describe('Image', () => {
it('tests accessibility from the render result', () => {
const results = accessibility.evaluate(render(<Image altText="image" />));

expect(results.resultCodes).toEqual(['Img_Name_WeakName']);
});
});

Using an HTMLElement

Use the rendered container when you want to evaluate the component's root DOM node directly.

import { accessibility } from '@audioeye/testing-sdk-jest';
import { render } from '@testing-library/react';
import React from 'react';

import { Image } from './image';

describe('Image', () => {
it('tests accessibility from an HTMLElement', () => {
const { container } = render(<Image altText="image" />);

const results = accessibility.evaluate(container);

expect(results.resultCodes).toEqual(['Img_Name_WeakName']);
});
});

Using a DocumentFragment

Use a fragment when you want to evaluate the output returned by asFragment().

import { accessibility } from '@audioeye/testing-sdk-jest';
import { render } from '@testing-library/react';
import React from 'react';

import { Image } from './image';

describe('Image', () => {
it('tests accessibility from a DocumentFragment', () => {
const { asFragment } = render(<Image altText="image" />);

const results = accessibility.evaluate(asFragment());

expect(results.resultCodes).toEqual(['Img_Name_WeakName']);
});
});

Using an HTML string

If your tests produce raw markup instead of rendered components, you can evaluate a string directly.

import { accessibility } from '@audioeye/testing-sdk-jest';

describe('raw HTML', () => {
it('tests accessibility from a string', () => {
const results = accessibility.evaluate('<img src="/logo.png" alt="image" />');

expect(results.resultCodes).toEqual(['Img_Name_WeakName']);
});
});
Helper names

The SDK provides helper names accessibility and a11y. You can use either one based on your team's preferred style.

SDK API

evaluate

Use evaluate to analyze a component or HTML fragment with AudioEye's rule set.

const results = accessibility.evaluate(render(<Image altText="image" />));

Parameters

expectSource (string | RenderResult | HTMLElement | DocumentFragment | JQuery<HTMLElement> )

The rendered output or markup to evaluate.

Returns

evaluate returns an instance of A11yResults.

A11yResults API

conformanceLevel

Filter results by WCAG conformance level. Valid levels are A, AA, and AAA. Higher levels include lower levels.

const aaResults = results.conformanceLevel('AA');

Parameters

› level (String)

Either A, AA, or AAA.

Returns

A new instance of A11yResults.

resultCodes

Get the matching accessibility rule codes as a string array.

const resultCodes = results.resultCodes;
// ['Img_Name_WeakName']

Returns

An array of strings representing the matching result codes.

resultsGroupedByWcagSuccessCriteriaLevel

Group results by WCAG success-criteria level.

results.resultsGroupedByWcagSuccessCriteriaLevel;
// { A: [ ... ], AA: [ ... ], AAA: [ ... ] }

Returns

An object containing results grouped by WCAG success-criteria level.

Example assertions

Assert on specific rule codes

Use resultCodes when you want a compact assertion on which issues were found.

const results = accessibility.evaluate(render(<Image altText="image" />));

expect(results.resultCodes).toEqual(['Img_Name_WeakName']);

Assert on a WCAG level

Use conformanceLevel(...) when your test should focus on a specific compliance target.

const results = accessibility.evaluate(render(<Image altText="image" />));

expect(results.conformanceLevel('A').resultCodes).toContain('Img_Name_WeakName');

Troubleshooting

No package found during install

If installation fails, verify that your entitlement token and package-manager configuration are set up correctly in getting started.

Tests fail because document or DOM APIs are missing

Confirm that Jest is using a DOM test environment such as jsdom.

Expected browser-dependent rules are not running

Jest does not provide the same browser context as Playwright, Cypress, or the CLI. If you need browser-context rules, use a browser-based integration instead. See About Our Rules.

Next steps

After your first Jest test is working, you can:

  • add accessibility assertions to your existing component tests
  • compare resultCodes in CI to prevent regressions
  • move browser-dependent scenarios to Playwright or Cypress
  • review Troubleshooting if installation or execution fails