Обновление Скриншотов прямо в CI
Обзор
Данная функция позволяет ревьюерам приниматьть новые эталонные скриншоты прямо из статического HTML-отчёта, опубликованного в CI (например, в S3 или на внутреннем веб-сервере). Интерфейс выглядит примерно так:

Данная функция очень похожа на GUI режим — вы можете принимать скриншоты и там, и там. Главное отличие заключается в том, что вы не можете запускать GUI в CI, но используя данную функцию это становится возможным. Благодаря этому можно экономить время, так как больше не нужно будет обновлять скринш оты, коммитить их вручную и выгружать в PR.
Типичный сценарий выглядит так:
- CI-прогон завершает тесты, генерирует сборку html-reporter и выкладывает статический отчёт в доступное ревьюерам место.
- Ревьюер открывает этот отчёт, помечает скриншоты, которые должны стать новыми эталонами, и нажимает Commit.
- html-reporter упаковывает выбранные скриншоты вместе с метаданными репозитория и отправляет их на принадлежащий вам сервис. Этот сервис работает постоянно (например, в вашем кластере или как облачная функция) и обновляет pull request новыми эталонами.
В режиме GUI эта функция выключена, потому что локальный интерфейс уже умеет принимать скриншоты напрямую. Чтобы элементы UI принятия скриншотов появились в статическом отчёте, необходимо задать URL репозитория, pull request'а и сервиса, как показано ниже.
Предварительная настройка
Д обавьте блок staticImageAccepter в конфигурацию репортера, которая используется при сборке статического отчёта:
plugins: {
'html-reporter/hermione': {
enabled: true,
// ...другие настройки репортера
staticImageAccepter: {
enabled: true,
repositoryUrl: 'https://github.com/org/project',
pullRequestUrl: 'https://github.com/org/project/pull/42',
serviceUrl: 'https://accepter.example.com/static-accepter',
meta: {
ciRunId: process.env.GITHUB_RUN_ID,
// дополнительные данные, которые нужны вашему сервису
},
axiosRequestOptions: {
timeout: 120000
}
}
}
}
- Элементы для принятия скриншотов в статическом отчёте не появятся, если не задан
enabledили отчёт открыт не в статическом режиме.repositoryUrl,pullRequestUrlиserviceUrlобязательны; без них кнопка «Accept» недоступна. - Сохраняемые изображения всегда ссылаются на путь эталона. html-reporter выбросит ошибку, если инструмент не предоставляет
refImg.relativePath, потому что сервису нужен конечный относительный путь для каждого файла. - Параметр
axiosRequestOptions(необязательный) прокидывается в HTTP-клиент интерфейса отчёта — так можно настроить таймауты, заголовки или авторизацию, требуемые вашим сервисом.