Обновление axe-core

Axe-core — это библиотека для автоматизированного тестирования доступности веб-приложений. Она активно используется в связке с JavaScript-фреймворками и инструментами тестирования, такими как Jest, Cypress или Puppeteer. Обновление библиотеки имеет критическое значение для поддержания актуальности правил доступности, исправления багов и интеграции новых возможностей.


Версионирование и совместимость

Библиотека axe-core использует семантическое версионирование (SemVer), где каждая версия имеет формат MAJOR.MINOR.PATCH.

  • PATCH — исправления ошибок, не влияющие на API.
  • MINOR — добавление новых правил или функций без нарушения обратной совместимости.
  • MAJOR — изменения, которые могут сломать существующий код.

При обновлении важно учитывать зависимости проекта. Для Node.js-проектов проверка совместимости осуществляется через package.json:

"dependencies": {
  "axe-core": "^5.0.0"
}

Символ ^ указывает, что допускаются минорные и патч-обновления, но не мажорные. Для абсолютного контроля рекомендуется фиксировать версии без каретки.


Проверка текущей версии

Перед обновлением необходимо определить, какая версия axe-core установлена:

npm list axe-core

Команда выводит дерево зависимостей и текущую версию. Для глобально установленных пакетов используется флаг -g.


Обновление через npm

Для обновления до последней версии в пределах текущей мажорной версии используется:

npm update axe-core

Если требуется обновление до конкретной версии:

npm install axe-core@5.5.1

Для полного обновления с переходом на новую мажорную версию:

npm install axe-core@latest

После обновления необходимо проверить, не нарушены ли тесты доступности и нет ли конфликтов с другими библиотеками.


Новые правила и улучшения

Каждое обновление axe-core приносит:

  • Расширение набора правил WCAG.
  • Улучшение точности существующих проверок.
  • Оптимизацию производительности анализа DOM.
  • Обновления отчетности, включая более структурированные JSON-отчеты.

Например, новые правила могут включать проверку контраста текста на динамически созданных элементах или улучшенную обработку ARIA-атрибутов.


Интеграция с тестовыми фреймворками

При обновлении axe-core часто требуется обновление интеграционных библиотек:

  • jest-axe для Jest
  • cypress-axe для Cypress

Эти адаптеры зависят от внутреннего API axe-core. Новые версии библиотеки могут вводить изменения в объект конфигурации, методы run или configure.

Пример конфигурации для Jest:

import { axe, toHaveNoViolations } from 'jest-axe';
expect.extend(toHaveNoViolations);

test('Страница должна быть доступной', async () => {
  const html = renderMyComponent();
  const results = await axe(html);
  expect(results).toHaveNoViolations();
});

При обновлении axe-core важно сверять документацию адаптера на предмет новых параметров конфигурации и формата отчета.


Советы по безопасному обновлению

  • Перед обновлением фиксировать текущую версию в package-lock.json.
  • Прогонять существующие тесты после обновления.
  • Внимательно проверять новые правила: некоторые могут выявить нарушения, ранее не обнаруженные.
  • Сохранять резервные копии конфигурационных файлов, если используются кастомные правила.

Автоматизация обновлений

Для проектов с регулярными проверками доступности рекомендуется настроить автоматические обновления:

  • Использование Dependabot или Renovate для отслеживания новых версий axe-core.
  • Настройка CI/CD для запуска тестов доступности после каждого обновления.
  • Генерация отчетов о новых нарушениях и их интеграция с инструментами мониторинга качества.

Обновление axe-core обеспечивает актуальность тестирования доступности, повышает качество веб-приложений и позволяет поддерживать соответствие современным стандартам WCAG.