Тестирование после миграции

После переноса на kepler.gl основная зона риска связана с несоответствием состояния карты между старой и новой реализацией. Проверка начинается с фиксации эталонного состояния: конфигурации mapState, набора datasets, описания layers и параметров визуализации.

Ключевая проблема миграции заключается в том, что структура состояния Kepler.gl тесно связана с внутренними редьюсерами и сериализацией. Любое изменение версии библиотеки может повлиять на:

  • формат координатных данных
  • структуру filters
  • порядок и идентификаторы слоёв
  • параметры взаимодействия (interaction config)
  • поведение visState при восстановлении из JSON

Для предотвращения регрессий применяется сравнение сериализованных снапшотов состояния до и после миграции. Используется детерминированная нормализация JSON, исключающая нестабильные поля, такие как временные идентификаторы или внутренние ссылки на WebGL-контекст.


Проверка совместимости данных и схемы слоёв

Особое внимание уделяется слоям визуализации, поскольку они являются наиболее чувствительной частью архитектуры Kepler.gl.

Основные точки контроля:

  • корректность типов слоёв (point, arc, line, heatmap, hexagon)
  • соответствие структуры config актуальной версии библиотеки
  • сохранение привязки полей данных к визуальным каналам (позиция, цвет, размер)
  • валидность агрегирующих функций

При миграции часто возникают ситуации, когда ранее допустимые конфигурации становятся невалидными из-за обновления схемы layerConfig. Для выявления таких случаев используется валидация через схему (JSON Schema или кастомные валидаторы), встроенную в тестовый слой.


Юнит-тестирование редьюсеров состояния

Архитектура Kepler.gl основана на Redux-подобной модели состояния, где ключевую роль играют редьюсеры:

  • visState
  • mapState
  • uiState
  • interactionState

Юнит-тесты направлены на проверку чистоты функций редьюсинга и их детерминированности при миграции.

Типичный набор проверок включает:

  • обработку экшенов добавления и удаления датасетов
  • изменение фильтров и сохранение их структуры
  • обновление конфигурации слоёв без потери связей с данными
  • восстановление состояния из сериализованного JSON

Особое внимание уделяется проверке обратной совместимости экшенов: старые action types могут сохраняться, но изменять внутреннюю структуру payload.


Интеграционное тестирование карты и визуализации

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

Основные сценарии:

  • загрузка набора данных и построение слоёв
  • изменение фильтров с мгновенным пересчётом визуализации
  • переключение между пресетами конфигурации
  • обновление данных в runtime без полной перезагрузки карты

Проверяется согласованность между:

  • visState и отрисованными слоями Deck.gl
  • mapState и камерой визуализации
  • uiState и отображением контролов

При миграции часто выявляются расхождения между состоянием и UI, связанные с изменением жизненного цикла компонентов.


E2E тестирование пользовательских сценариев

End-to-End тестирование моделирует полную цепочку работы приложения с Kepler.gl после миграции.

Типовые сценарии включают:

  • загрузку GeoJSON или CSV
  • создание нескольких слоёв разных типов
  • применение фильтров по времени и числовым диапазонам
  • сохранение состояния в JSON и последующее восстановление
  • экспорт результата визуализации

Для E2E тестов используется headless-рендеринг браузера с проверкой DOM и WebGL-контекста. Валидация результата часто строится не на изображениях, а на состоянии внутренних структур, так как визуальный рендер может варьироваться между версиями браузеров и драйверов.


Тестирование сериализации и восстановления состояния

Одним из критических аспектов миграции является механизм save/load state.

Проверяется:

  • полнота сериализации kepler.gl состояния
  • корректность десериализации при новой версии схемы
  • устойчивость к отсутствующим или устаревшим полям
  • обработка расширенных пользовательских конфигураций

Особую сложность представляет частичное устаревание схемы, когда старые поля не удалены, но игнорируются. В таких случаях тесты должны фиксировать не только отсутствие ошибок, но и корректное поведение системы при деградации данных.


Тестирование производительности после миграции

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

Измеряются следующие параметры:

  • время первичной инициализации карты
  • время рендеринга слоёв при изменении фильтров
  • потребление памяти при активной анимации
  • скорость пересчёта агрегаций (hexagon, grid)

Для стабильности результатов используются повторяемые тестовые датасеты с фиксированным seed генерации.

Регрессии производительности часто возникают из-за изменений в:

  • алгоритмах кластеризации
  • обновлениях Deck.gl
  • изменениях в механизме memoization редьюсеров

Проверка кастомных слоёв и расширений

При использовании пользовательских слоёв тестирование после миграции становится критически важным.

Проверяется:

  • совместимость API кастомных слоёв с новой версией Kepler.gl
  • корректность передачи props из состояния
  • сохранение интерактивности (hover, click, selection)
  • интеграция с системой фильтров

Особое внимание уделяется случаям, когда кастомный слой опирается на внутренние API Deck.gl, которые могли измениться без обратной совместимости.


Тестирование миграции состояния между версиями

Сценарий миграции между версиями библиотеки требует отдельного класса тестов.

Используются:

  • снапшоты состояния из старой версии
  • прогон через миграционный слой (migrations layer)
  • сравнение результата с эталонной структурой новой версии

Проверяются следующие аспекты:

  • сохранение всех данных без потерь
  • корректное преобразование устаревших полей
  • отсутствие дублирования слоёв
  • корректная работа fallback-логики

Автоматизация регрессионного тестирования

Регрессионный контур формируется вокруг набора фиксированных сценариев:

  • базовая карта с одним слоем
  • многослойная визуализация с фильтрацией
  • динамическое обновление данных
  • сохранение и восстановление состояния

Каждый тест запускается на нескольких версиях зависимостей, включая разные версии Deck.gl и React, чтобы исключить скрытые несовместимости.

Сравнение результатов проводится на уровне:

  • структуры состояния
  • количества отрендеренных слоёв
  • итоговых данных агрегации
  • стабильности взаимодействий

Валидация данных после миграции

Финальный слой тестирования связан с проверкой качества данных после всех преобразований.

Проверяются:

  • сохранность геометрических координат
  • корректность типов данных после парсинга
  • отсутствие потерь при трансформации CSV/JSON
  • согласованность между исходными и визуализированными данными

Особенно критично выявление тихих ошибок, когда визуализация строится корректно, но значения данных изменены из-за изменения парсера или агрегации.


Тестирование взаимодействия с внешними источниками данных

Kepler.gl часто интегрируется с внешними API и потоками данных.

После миграции проверяется:

  • корректность загрузки данных через fetch-слои
  • обработка потоковых обновлений
  • синхронизация состояния при асинхронных изменениях
  • устойчивость к частичным ответам API

Особое внимание уделяется обработке ошибок сети и повторной инициализации слоёв без полной перезагрузки состояния карты.