Интеграционные тесты в контексте CesiumJS направлены на проверку взаимодействия компонентов системы: сцены, источников данных, визуализации тайлов, управления камерой и пользовательских сценариев. В отличие от модульных тестов, где изолируются отдельные функции или классы, интеграционное тестирование фиксирует поведение системы в условиях, близких к реальному окружению браузера с WebGL.
CesiumJS опирается на WebGL и сложную графическую подсистему. Это формирует несколько ключевых особенностей:
В интеграционных тестах основное внимание смещается с визуальной идентичности на поведенческую корректность: корректность вызовов API, состояние сцены, загрузка сущностей, управление камерой и синхронизация данных.
Интеграционные тесты в Cesium-проектах обычно строятся на нескольких уровнях:
1. Инициализация Viewer и сцены Проверяется
корректность создания экземпляра Viewer, подключение
базовых слоёв, настройка координатной системы и начального состояния
камеры.
2. Работа с сущностями (Entities API) Тестируется добавление, обновление и удаление объектов через Entity API, включая корректность привязки координат и свойств.
3. Загрузка источников данных GeoJSON, KML, CZML и 3D Tiles проверяются на корректную интеграцию в сцену и появление соответствующих примитивов.
4. Камера и навигация Проверяется корректность переходов камеры, flyTo, setView и реакция сцены на изменение состояния.
5. Асинхронные процессы Загрузка тайлов и текстур
проверяется через ожидание состояния tilesLoaded или
аналогичных индикаторов.
Интеграционные тесты CesiumJS часто требуют браузерного окружения с поддержкой WebGL или его эмуляции.
Используются следующие подходы:
Наиболее реалистичный сценарий обеспечивается браузерным запуском, поскольку Cesium активно использует GPU-ускорение.
При использовании Jest требуется настройка среды выполнения:
testEnvironment: "jsdom" или кастомного
окруженияwindow.requestAnimationFrameТипичная проблема — отсутствие WebGL контекста. Решается через:
jest-canvas-mockheadless-glCesiumJS активно использует сетевые запросы к тайлам и ресурсам. В интеграционных тестах такие зависимости изолируются:
Resource.fetchImageryProviderЭто позволяет устранить нестабильность тестов, вызванную сетью.
Создание и базовая инициализация Viewer является частым интеграционным сценарием.
Проверяются следующие аспекты:
Scene)Особое внимание уделяется состоянию сцены:
scene.globeimageryLayersEntity API является высокоуровневым слоем абстракции CesiumJS. Интеграционные тесты проверяют:
viewer.entitiesОсобое значение имеет реактивность системы: изменение свойств должно приводить к обновлению сцены без ручного перерисовывания.
3D Tiles представляют наиболее сложный аспект интеграционного тестирования.
Проверяются:
Cesium3DTilesettilesLoaded,
allTilesLoaded)Для стабильности используются упрощённые tileset-файлы, содержащие минимальную иерархию.
CesiumJS активно использует асинхронные обновления через render loop.
В тестах применяются стратегии:
requestAnimationFrameКритическим аспектом является контроль времени: тесты не должны зависеть от реальной скорости рендеринга.
Камера является центральным элементом интеграционного поведения сцены.
Проверяются:
setViewflyToВажным аспектом является допущение погрешностей: сравнение координат выполняется с epsilon-допуском из-за особенностей floating-point и WebGL.
При отсутствии GPU-окружения используется имитация WebGL:
Это позволяет выполнять тесты в CI/CD средах без графического ускорения.
Интеграционные тесты CesiumJS встраиваются в pipeline:
Особое внимание уделяется стабильности: тесты не должны флапать из-за графических различий между окружениями.
Хотя CesiumJS сложен для пиксельного сравнения, применяется подход:
Используются пороги допуска, а не строгие совпадения пикселей.
Тестовые сцены формируются из:
Это обеспечивает воспроизводимость и исключает зависимость от внешних сервисов.
В проектах с CesiumJS часто встречаются следующие проблемы:
Решение заключается в строгом контроле жизненного цикла Viewer и явной очистке сцены после теста.
Корректное завершение теста включает:
viewer.destroy()Игнорирование этих операций приводит к утечкам памяти и нестабильности последующих тестов.