Метод axe.reset

Метод axe.reset используется для восстановления внутреннего состояния библиотеки после выполнения тестов на доступность. В контексте автоматизированного тестирования это критически важно для предотвращения накопления данных о предыдущих проверках, которые могут повлиять на последующие тесты.


Назначение и область применения

axe.reset очищает конфигурацию и результаты предыдущих запусков, возвращая библиотеку в исходное состояние. Его применение особенно актуально в следующих сценариях:

  • Множественные последовательные проверки на одной странице с динамическим контентом.
  • Интеграция Axe-core с тестовыми фреймворками (например, Jest, Mocha, Cypress), где один и тот же DOM используется для разных тестов.
  • Сценарии с модальными окнами, вкладками или другими компонентами, которые загружаются и уничтожаются динамически.

Без вызова axe.reset предыдущие данные могут сохраняться в памяти, вызывая ложные срабатывания или некорректные результаты анализа.


Синтаксис

axe.reset();
  • Метод не принимает параметров.
  • Возвращает undefined.

Метод является синхронным, поэтому его вызов блокирует дальнейшее использование библиотеки до завершения очистки внутреннего состояния.


Внутреннее поведение

  1. Очистка результатов – удаляются все ранее сгенерированные отчёты о нарушениях, рекомендации и предупреждения.
  2. Сброс конфигурации – возвращаются значения по умолчанию для настроек сканирования, если они были изменены через axe.configure().
  3. Удаление зарегистрированных правил – если в ходе работы были добавлены кастомные правила через axe.registerRule(), они остаются, но их активность пересчитывается согласно текущей конфигурации.

Важно понимать, что axe.reset не удаляет DOM-элементы и не влияет на состояние веб-страницы. Его задача — чисто логическая, касающаяся внутреннего состояния библиотеки.


Примеры использования

Пример 1: последовательные проверки на одной странице

import axe from 'axe-core';

async function runTests() {
    await axe.run(document, {}, (err, results) => {
        console.log('Первый тест', results.violations.length);
    });

    axe.reset();

    await axe.run(document.querySelector('#dynamic-section'), {}, (err, results) => {
        console.log('Второй тест', results.violations.length);
    });
}

runTests();

В этом примере первый и второй тест полностью независимы друг от друга благодаря вызову axe.reset.

Пример 2: интеграция с Cypress

cy.visit('/page');
cy.injectAxe();

cy.checkA11y(); // первый тест
cy.window().then(win => {
    win.axe.reset();
});
cy.get('#new-content').checkA11y(); // второй тест на новом контенте

Здесь axe.reset позволяет корректно анализировать динамически подгруженный блок контента без влияния предыдущего состояния.


Практические рекомендации

  • Регулярное использование в тестах с повторным использованием DOM предотвращает накопление артефактов и ускоряет диагностику.
  • Не требуется при единичном сканировании страницы, если библиотека инициализируется заново при каждом запуске.
  • Совместимость с кастомными правиламиaxe.reset не удаляет зарегистрированные правила, но их конфигурация может быть пересчитана.

Отличие от axe.clear()

Метод axe.clear() также очищает результаты предыдущего запуска, однако:

  • axe.clear() не сбрасывает конфигурацию библиотеки.
  • axe.reset() выполняет полный сброс внутреннего состояния, включая настройки, что делает его предпочтительным для последовательных и изолированных тестов.

Использование axe.reset обеспечивает максимальную предсказуемость при сложных сценариях автоматизированного тестирования и снижает риск ложноположительных результатов при проверке доступности.


Метод axe.reset является ключевым инструментом для поддержания чистоты внутреннего состояния Axe-core при многоэтапных и динамических проверках доступности в JavaScript.