насAutomatticкомпанииWordPress.comКCalypsoУправляемый проектом, и все тесты в этом проекте используютMochaРамка. Проект также включает в себя сквозные тесты, все из которых хранятся в своих независимыхБиблиотека кодавнутри. Мы используем эту установку более трех лет, и я думаю, что пришло время пересмотреть этот выбор. Я нашел эту статью [Сравнение инструментов модульного тестирования] (Mo.GitHub.IO/2017/06/05/…Олссон** поделился с нами своими выводами, с которыми я полностью согласен:
Я чувствую, что трудно игнорировать стремление Jest продолжать использовать Javascript. Конечно, если это число#2059Было бы здорово решить проблему. Тогда я должен сказать, что для многих людей мокко кажется достаточным.
В этом посте я хочу выделить имяJestОсобенности тестового инструмента. Эти особенности делают его привлекательным вариантом. Мы несколько раз вкратце обсуждали Jest внутри компании, в основном фокусируясь на уникальном методе тестирования функции моментальных снимков. На мой взгляд, эта функция — лишь вишенка на торте, поэтому я лучше расскажу о других преимуществах, которые считаю более важными.
Доказательство концепции проекта Calypso
Я создал два мерж-реквеста, чтобы выяснить, сколько усилий потребуется, чтобы перенести тесты с Mocha на Jest. Довольно легко добраться до точки, когда все модульные тесты, проверяющие выполнение серверного кода, работают в Jest должным образом. Я снова переписал тестовый файл, использовал API-интерфейс Jest и сравнил его с Mocha, чтобы проиллюстрировать метод написания тестов. Помимо этих основ, я даже смог совместить Jest с Circle CI и редактором PhpStorm, а также настроить покрытие кода и режим мониторинга (это не заняло много времени. Хотите узнать больше).этот запрос на слияние, практически завершена.
Для тестов, запускаемых клиентом, я тоже экспериментировал. Так же, как и в предыдущем коде сервера, в большинстве случаев копирование и вставка, а также несколько изменений достаточно, чтобы тестирование могло помочь в разработке. Жаль 70
Все 550+ пройденных тестов заняли 10 секунд в одном ряду Moc-a, но остальные 150+ тестов заняли еще 40 секунд, что интересно. В Jest 20 секунд на прохождение тестов и 50 секунд на провальные тесты. думаю, даже еслиmockery
Мок-модуль заменяется собственной фиктивной функцией Jest, а такжеuseFakeDom
Трудно сказать, как будет производительность со вспомогательными функциями и параметрами среды браузера Jest, но лично я оцениваю, что она будет несколько улучшена.
Кроме того, мы говорим о секундах и секундах, и интересно, что другие компании смогли сократить время выполнения на несколько минут после перехода на Jest. проверить этоКейс Airbnb.
Обзор шуток
Я впервые услышал о Jest в прошлом году, но инженеры Facebook используют его уже много лет. В настоящее время он по-прежнему разрабатывается и поддерживается Facebook, но объем внешней помощи увеличивается.
Лучший способ узнать о Jest — это услышать, что говорит один из его создателей. рекомендую ознакомиться сChris Pojerпроизнесенные речи,Создавайте высококачественные инструменты JavaScript, записано вЕвропейская JS-конференция 2017:
Мы в Automattic уже используем Jest, тестируемDelphinкод для проекта. Именно этот проект движетget.blogФункция блога, позволяющая пользователям регистрировать доменные имена .blog. а такжеSimplenote for ElectronТакже проект, который использует Jest для проверки кода.
Упрощенный API
Jest простой, но мощный, со встроенной поддержкой:
-
Гибкая конфигурация: например, тестовые файлы могут быть обнаружены с помощью подстановочных знаков в именах файлов.
-
Предварительный тест (Setup) и после шага (Teardown), а также объем теста.
- Сопоставители: могут использовать ожидания
expect
синтаксис для проверки различного содержимого. - Тестирование асинхронного кода: поддержка типов данных promise и асинхронного ожидания
async
/await
Функция. -
Мок-функция: вы можете изменять или отслеживать поведение функции.
-
Насмешка вручную: зависимости модулей можно игнорировать при тестировании кода.
-
Виртуальный хронометраж: помогает контролировать течение времени.
Есть много других функций, о некоторых я расскажу более подробно в разделах ниже.
производительность и изоляция
В документации Jest говорится:
Jest может использовать все рабочие части и запускать тесты параллельно, чтобы максимизировать производительность. Информация на терминале буферизуется и, наконец, распечатывается вместе с результатами теста. Тестовые файлы, сгенерированные в песочнице, а также автоматическое глобальное состояние сбрасываются при каждом тесте, чтобы не было конфликта между двумя тестами.
По сравнению с Mocha, который запускает все тесты в одном процессе, Jest совершенно другой. Чтобы имитировать изоляцию между тестами, нам пришлось ввести несколько тестовых помощников для правильного управления очисткой. Это не идеально, но работает в 99% случаев, потому что тесты выполняются последовательно.
Иммерсивный режим наблюдения
Быстрый интерактивный режим мониторинга может отслеживать, какие тестовые файлы были изменены, запускать только тесты, связанные с измененными файлами, и может быстро выдавать сигналы мониторинга благодаря оптимизации. Его довольно легко настроить, и есть несколько дополнительных опций для фильтрации тестов по имени файла или имени теста. У нас также есть режим мониторинга, когда мы используем Mocha, но он не такой мощный.Чтобы запустить определенную тестовую папку или файл, мы должны создать свои собственные обходные пути, и эти функции уже предоставлены самой Jest без каких-либо усилий.
Режим мониторинга Jest
покрытие кода
Jest имеет встроенные отчеты о покрытии кода, что упрощает настройку. Информация о покрытии кода может быть собрана по всему проекту, включая непроверенные файлы. Такого же результата нам пока не удалось добиться с Mocha, вероятно, потому, что мы не тратили много времени на попытки.
Вывод в командной строке результатов покрытия кода Jest
Интеграция с IDE
Используя командную строку и файлы конфигурации, работающие в инструменте непрерывной интеграции CircelCI, я интегрировал Jest и PhpStorm, и я могу просматривать и находить определенные тесты одним щелчком мыши или просто повторно выполнять один тест. Мои коллеги спрашивали меня, как это сделать, и в прошлом я интегрировал Mocha с IDE, но после введения независимого механизма сбора тестовых файлов его больше нельзя было использовать.
Интеграция PhpStorm с Jest
Интеграция пользовательских отчетов
Для завершения интеграции Circle CI требуется только настраиваемая функция отчетности. С Jest используйтеjest-junit-reporterЭто можно сделать, и его использование почти такое же, как у Мокко.
Отчет о результатах тестов JUnit, настроенных для Jest
Функция моментального снимка
Когда я впервые увидел функцию моментальных снимков Jest в действии, я отнесся к этой концепции с некоторым скептицизмом, потому что она не подходила.тест-первыйСпособ. Однако, когда я впервые услышал о JSX и Redux, у меня были смешанные чувства. Теперь, когда у меня есть такой опыт, как только я использую эту функцию моментального снимка, я уверен, что она мне обязательно понравится. Конечным результатом является то, что моментальные снимки помогают нам быть уверенными в том, что изменения в интерфейсе не являются непредсказуемыми. Ниже приводится описание этой функции в документации Jest:
Цель моментального тестирования не в том, чтобы заменить существующие модульные тесты, а в том, чтобы сделать их более ценными и простыми для тестирования. В некоторых случаях, для некоторых функций, таких как компоненты React, тестирование моментальных снимков означает отсутствие необходимости в модульном тестировании, но опять же, это не так.
Чтобы узнать больше о функции моментальных снимков Jest, вы можете взглянуть наRogelio GuzmanсуществуетРеагирующая конференция 2017Выступление записано:
Функция запуска нескольких проектов
В настоящее время у нас настроено четыре раздела, каждый из которых выполняет тесты в разных конфигурациях. Мы делаем это, чтобы иметь возможность запускать интеграционные и модульные тесты одновременно. Модульные тесты должны затрагивать код, который находится на сервере и выполняется в браузере, а также проверяются некоторые вспомогательные функции тестирования. Команда Jest недавно представила способ запуска нескольких проектов одновременно, что значительно упростит режим мониторинга и интеграцию с IDE. Мне не удалось найти способ применить эту функциональность к нашей кодовой базе, но она выглядит многообещающе.
новая среда тестирования
В Facebook люди пытались заменитьJasmineФреймворк, вместо этого используйте свой собственный тестовый фреймворкjest-circus. Первые изменения были внесены и попали в репозитории Jest:
С Жасмин это сложно сделать быстро. Поскольку кодовая база не принадлежит нам, сложно внедрить новые функции, исправить существующие ошибки, изменить существующий дизайн или просто отладить кодовую базу. Кроме того, кодовая база Jasmine не является потоковой, что затрудняет ее интеграцию.
этот запрос на слияниеЦель состоит в том, чтобы заменить Jasmine другим фреймворком, способным воспроизвести его функциональность, но при этом сделать все максимально простым.
Они также разветвили Jasmin версии 2.5 на собственный тестовый бегун Jest.Большие части Jasmine были переписаны и добавлены в последней версии.Опубликовано 20 изданий.
резюме
Будущее Jest выглядит очень захватывающим! Видя, как Jest выходит так быстро, я чувствую, что скоро он станет предпочтительным инструментом для большинства проектов в экосистеме React.
Рекомендую,Тесты нужно перенести в Jest. Для принятия окончательного решения следует учитывать следующие моменты:
Положительные факторы:
-
Более простой API и меньше стандартного кода.
-
Гибкость и простота настройки.
-
Тестовые файлы выполняются изолированно друг от друга.
-
Расширенный режим мониторинга.
-
Поддержка моментальных снимков упрощает начало тестирования.
-
покрытие кода.
Отрицательные факторы:
-
Еще одно миграционное действие.
-
Mocha по-прежнему работает немного лучше (на основе моих быстрых тестов).
использованная литература
- JestОфициальный сайт.
- Инструмент модульного тестирования Javascript, что хорошо сравнивается.
- Jest Version 19: иммерсивный режим мониторинга и улучшения испытательного стендаОт официального блога.
- Шутка 20: 💖Тесты симпатичные, 🏃🏽Проект многоразовый, из официального блога.
- Повышение производительности тестов: переход с Mocha на JestКейс Airbnb.