@testcafe-community/axe

The TestCafe module that allows you to use the aXe accessibility engine in TestCafe tests

Usage no npm install needed!

<script type="module">
  import testcafeCommunityAxe from 'https://cdn.skypack.dev/@testcafe-community/axe';
</script>

README

@testcafe-community/axe

The TestCafe module that allows you to use the aXe accessibility engine in TestCafe tests.

Installation

yarn add -D axe-core @testcafe-community/axe

Or using npm:

npm i -D axe-core @testcafe-community/axe

How to use

You can write a TestCafe test with automated accessibility checks like this.

Add the following clientScript in your testcafe config:

"clientScripts":[{"module":"axe-core/axe.min.js"}]
import { checkForViolations } from '@testcafe-community/axe';

fixture `TestCafe tests with Axe`
    .page `http://example.com`;

test('Automated accessibility testing', async t => {
    // do stuff on your page
    await checkForViolations(t);
});

If any accessibility issues are found, you will see a detailed report in the error log.

Accessibility errors

aXe options

The @testcafe-community/axe module allows you to define the context and options axe.run parameters in a TestCafe test.

import { checkForViolations } from '@testcafe-community/axe';

test('Automated accessibility testing', async (t) => {
    const context = { exclude: [['select']] };
    const options = { rules: { 'html-has-lang': { enabled: false } } };

    await checkForViolations(t, context, options);
});

Legacy API

This project was forked from axe-testcafe which has been dormant for quite some time. If you prefer to use that API you can still use that:

import { axeCheck, createReport } from 'axe-testcafe';

fixture `TestCafe tests with Axe`
    .page `http://example.com`;

test('Automated accessibility testing', async t => {
    const { error, violations } = await axeCheck(t);
    await t.expect(violations.length === 0).ok(createReport(violations));
});

Using full axe result object and axe.configure

If you prefer to use a custom reporter for axe results you can get result object using runAxe function:

import { runAxe } from '@testcafe-community/axe';
import { createHtmlReport } from 'axe-html-reporter'; // example of custom html report for axe results

fixture `TestCafe tests with Axe`
    .page `http://example.com`;

test('Automated accessibility testing', async t => {
    const { error, results } = await runAxe(); // "context" and "options" parameters are optional
    // "results" constant contains full axe Results object (https://www.deque.com/axe/core-documentation/api-documentation/#results-object)
    await t.expect(error).eql(null, `axe check failed with an error: ${error}`);
    createHtmlReport({
        violations: results.violations,
        passes: results.passes,
        incomplete: results.incomplete,
        url: results.url,
        projectKey: 'EXAMPLE',
    }); // creates HTML report with the default file name `accessibilityReport.html`
});