Тестирование интернационализации отличается от классического тестирования логики тем, что проверяется не поведение алгоритма, а согласованность и полнота текстового слоя приложения. Переводы становятся частью интерфейса, а значит подчиняются тем же требованиям предсказуемости, что и UI-компоненты: стабильность, воспроизводимость, отсутствие регрессий.
В экосистеме FormatJS сообщения формируются как структурированные ICU-строки, что позволяет тестировать их не как «строки текста», а как формальные выражения с параметрами, множественными формами и форматированием.
Сообщения в FormatJS строятся вокруг ICU MessageFormat:
{name}){count, number}){date, date})select, plural)Тестирование переводов в этом контексте затрагивает не только текст, но и корректность интерпретации структуры сообщения.
Ключевые свойства, подлежащие проверке:
FormatJS предоставляет инструменты CLI для извлечения сообщений из
кода (@formatjs/cli). На этапе тестирования важно
проверять, что извлечённые сообщения совпадают с эталонной
структурой.
Типичный сценарий проверки:
извлечение сообщений из исходного кода
сравнение с эталонным JSON-каталогом
выявление:
Подобная проверка обычно оформляется как отдельный шаг CI и может быть реализована через diff JSON-структур.
В React-среде тестирование компонентов с переводами требует подмены
контекста IntlProvider. Основная цель — изолировать
компонент от внешних файлов локализации и обеспечить детерминированный
вывод.
Пример типовой стратегии:
IntlProvider с одной локальюlocale
(например, en)Особое внимание уделяется:
missing translation leakage)При тестировании важно исключить влияние реального окружения
браузера, особенно Intl API, если требуется строгая
повторяемость.
Одним из критических аспектов является проверка передачи параметров в сообщения.
Проблемные случаи:
Тестирование строится вокруг подстановки фиктивных данных:
Snapshot-тестирование применяется для контроля стабильности визуального текста интерфейса.
Основная идея:
Риски snapshot-подхода:
Поэтому snapshot-тестирование чаще используется как дополнительный слой, а не основной механизм контроля.
Для проверки устойчивости интерфейса применяется псевдолокаль, например:
Цель такого тестирования — выявить:
FormatJS позволяет легко подставлять псевдолокали через стандартный
механизм IntlProvider.
ICU-строки требуют строгого синтаксического соответствия. Ошибки часто возникают при ручном редактировании переводов.
Типовые проблемы:
number,
date, plural)select и pluralДля автоматической проверки применяются парсеры ICU, которые могут быть встроены в тестовый пайплайн. Любое сообщение должно успешно проходить парсинг без исключений.
Fallback-механизм является критически важной частью системы интернационализации.
Проверяется поведение при:
Корректная система должна:
Тесты обычно строятся на искусственно урезанных наборах локалей.
Система сообщений должна сохранять структуру при переводе:
Типовой тест сравнивает:
Любое расхождение трактуется как ошибка синхронизации переводов.
FormatJS активно использует Intl API для форматирования значений.
Проверке подлежат:
Тестирование строится на фиксированных входных данных и строгом сравнении выходных строк.
Особое внимание уделяется различиям локалей, где:
В рамках CI-пайплайна тестирование интернационализации обычно разбивается на несколько этапов:
Каждый этап блокирует сборку при обнаружении ошибок, связанных с:
Такая организация делает систему переводов детерминированной частью сборочного процесса, а не внешним ресурсом.