Автор оригинала: FreeCodeCamp Community Member.
IAIN NASH
Времена и даты невероятно сложно правильно реализовать в коде. Это делает тестирование даты и временной код правильно важным. Тестирование позволяет рассуждать вокруг логики в коде, а также разрешать увлечение кромки или ошибок, прежде чем они повлияют на пользователей.
Общая ошибка при тестировании даты и временного кода, чтобы не установить текущее время в статическое время. Если код в UI оказывает сегодняшнюю дату и проверяется правильно, этот тест, который работает только до тех пор, пока текущее время не меняется. JavaScript открывает встроенный Дата
Объект, который позволяет извлечь текущее время через конструкцию без аргументов или вызова на сейчас ()
имущество.
Moment.js Это популярная библиотека манипулирования на предельной сети, которая обычно используется для манипулирования, нагрузки, формата и временем смещения. Он использует пустой конструктор, чтобы получить текущее время. Через не часто используется в сочетании с моментами и реагированными приложениями. Кроме того, тестирование шума на снимкость новых зависимостей вводит новые зависимости на дату и время, которые важны для рассмотрения. Ниже приведен пример проблемной компоненты, который делает текущий день:
Первоначальный тест для Touchyintro
Компонент может выглядеть так:
Однако этот тест потерпит неудачу в любой день, который не является 23 января. Решением для этого – переопределить функцию даты JavaScript для возврата известной даты для работы против записи тестов.
Этот код переопределяет конструктор даты для установки статического «текущего» даты:
Неэффективное решение состоит в том, чтобы сделать дату математики самостоятельно в течение текущего времени. Это неэффективный тест, потому что вы используете тот же код, который вы тестируете, чтобы проверить возвращаемое значение. Например, если тестирование, сравнивая отформатированные даты до момента, один не поймал, если момент форматирования кода меняется Ммм
к Ян
вместо Ян
Отказ
Способы установить статическое время и часовое появление для шума/JS
- Используйте библиотеку, чтобы издеваться на объект Date Date, чтобы вернуть статическую дату и часовую точку (мы рекомендуем Mockdate для простых случаев, но читайте на разбивке альтернатив)
- Макет
момент (). Формат ()
Чтобы вернуть статическую строку - Макет
Дата
Конструктор исейчас ()
функция, чтобы вернуть статическое время
Использование библиотеки в этом случае предпочтительнее, поскольку эти библиотеки хорошо проверены, не вводят код BoaterPlate и обрабатывать прозрачно оба случая, даты могут быть созданы ( date.now ()
vs Новая дата ()
и т. Д. ). Кроме того, использование библиотеки позволяет легко использовать тестовый код и настроить определенное время на тест, который позволяет для лучшей практики тестирования.
- Mockdate Обеспечивает дополнительные функциональные возможности для зон часовых поясов и просты в использовании
- Синон Дата и таймер (
SettimeOut
и т. Д.) Макеты - Установка вручную макет может быть полезен в ограниченных средах, однако, может стать довольно сложным
- Жасмин (не включен в шутку), поставляется с Jasmine.Clock ()
Приведенные ниже примеры используются Mockdate , который сосредоточен только на издевании объекта даты просто и обрабатывает смещения времени тестирования часового пояса, а также для тестирования конвертации местного часового пояса.
А Snapshot Test Кроме того, просто тестировать с издевательствами даты:
С фермент это потрясающая библиотека, фермент неглубокий пример:
Как (лучше) дата тестирования логика
Даты имеют много краевых чехлов и логику позади них. При тестировании даты обязательно охватываем краевые чехлы и не просто устанавливайте одну конкрещую дату для проверки и перемещения. Даты также могут варьироваться в зависимости от языка и часового пояса.
Правильное тестирование даты требуют рассуждения вокруг краевных случаев, которые могут возникнуть и написание тестов, чтобы убедиться, что эти краевые случаи ведут себя как ожидалось, и что будущие изменения в коде или библиотеки, используемые в вашем приложении, не нарушают эти предположения. Кроме того, добавление кода для установки текущей даты и времени в статическую дату и время в течение всего тестового кода, может быть проще, но предотвращает хорошие рассуждения вокруг даты тестирования и скрытыми предположениями тестирования в библиотечном коде.
Вот несколько неверных и часто неявных предположений о датах:
- Клиенты все существуют в течение одного часового пояса и летнего времени
- Все клиенты существуют в течение часового пояса разработчика
- Продолжительность имени месяца относительно похоже
- Серверные часы всегда правильные
- Сервер знает настройки часового пояса клиента/времени
Этот тест предполагает, что сервер всегда находится в правильном часовом поясе, и этот часовой пояс устанавливается правильно. Вместо этого установите часовой пояс и убедитесь, что дата правильно совпадает с локальным часовым поясом.
Важно обеспечить, чтобы при тесты доступа к текущему времени «текущее время» устанавливается на статическое значение. Если значение динамично, либо тесты в конечном итоге разрываются, либо тестирование тестирования на динамические значения. Динамические значения не эффективны при тестировании поведения, поскольку ошибка не будет выставлена путем сравнения возвращаемой величины двух функций, которые такие же, как по сравнению с сравнением со статическим значением, которое не изменяется, поскольку код изменен.
Выглядит в будущее: дата времени хранения и дизайн
Наличие требований к добавлению тестов на кодовую базу не обязательно предоставляет какое-либо значение, если эти тесты не будут рассмотрены, запускать и рассуждать как строго как строго в качестве выполнения кода.
ДАТА И ВРЕМЯ ЛОГИКА Введите большой набор возможностей с точки зрения поведения и вывода, что делает сильный стимул для эффективной тестирования для даты и времени. Помимо тестирования, подтверждения и хранения соответствующих данных вместе с стратегией для синхронизации и хранения времена даты хранения постоянно по системам, рано, помогают тестированию, а также для лучшего пользовательского опыта.
Эти советы и подходы применяются к более чем просто JavaScript & Jest Testing для дат и времени. Они также работают в контексте Nodejs и в общем смысле вокруг ключевых вещей для проверки в системах, которые обрабатывают дату и время в целом. Во многих случаях время хранения на сервере в UTC (универсальное скоординированное время), затем преобразование в локальный часовой пояс на основе настроек клиента/браузера, идеально подходит. Если клиент недоступен, хранение как времени UTC, так и фактическое часовое значение времени UTC – это эффективный способ последовательно лечить даты и времена.