Перейти до основного змісту

Jest 16.0: Turbocharged CLI & Оновлення спільноти

· 5 хвилин читання

Пройшов місяць з моменту останнього великого релізу, а ми вже значно покращили роботу Jest. Цього великого релізу ми оновлюємо формат знімків, що може вимагати оновлення існуючих знімків при оновленні Jest. Ми не вносимо ці зміни бездумно та не розраховуємо робити їх часто, але вважаємо за необхідне час від часу покращувати формат.

Оновлений CLI

reporter

Jest 16 включає новий інтерфейс генератора звітів, який показує запущені тести, а також оновлюваний підсумок і смугу прогресу на основі розрахункового часу виконання з попередніх запусків. Ми також покращили вивід CLI для кращої роботи з різними кольоровими схемами. Якщо в попередньому виконанні в тестах були помилки, нині Jest буде запускати ці тести першими, щоб якомога швидше надати корисні дані користувачам.

Також ми додали безліч нових функцій, які вам можуть знадобитись:

  • Були додані нові CLI прапорці: параметр --testNamePattern=pattern чи -t <pattern> було додано для фільтрації тестів командним рядком, так само як it.only або fit в тестах.
  • Попередньо провальні тести тепер завжди виконуються першими.
  • jest <pattern> тепер не враховує регістр, що полегшує фільтрування тестових файлів.
  • Запуск тестів у режимі спостереження тепер можна переривати. Під час запуску тестів, просто натисніть будь-які ключі, що використовуються для вводу в режимі перегляду (a, о, р, q або enter), щоб перервати запуск тестів і почати новий.
  • Прапорець --bail наразі також працює в режимі спостереження. Враховуючи першочерговий запуск попередньо невдалих тестів, режим спостерігання Jest буде відчуватись надмоторним!
  • Jest тепер автоматично розглядає файли та тести з розширенням jsx.
  • Jest попереджає про повторні ручні файли імітацій та ми вдосконалили автоматично створені імітації для ES модулів, скомпільованих за допомогою babel.
  • Додана функція jest.clearAllMock для очищення всіх імітацій між тестами.
  • Ми покращили роздільну здатність модуля при використанні moduleNameMapper.
  • CLI параметр --findRelatedTests <fileA> <fileB> додано у виконання тестів, пов'язаних з вказаними файлами. Це особливо корисно як хук перед комітом, якщо ви хочете запустити тести лише з вказаних файлів з відповідними тестами.

Так Jest виглядає, коли виконання тестів перервано в режимі спостереження: watch

Оновлення знімків

Реалізація знімків Jest була повністю переписана. Нова версія пакету jest-snapshot зараз структурується для полегшення інтеграцій з іншими виконавцями тестів і забезпечує кращі інтеграції, такі як React Storybook. Jest не позначає знімки як застарілі в файлі з пропущеними або помилковими тестами. Ми також зробили ряд змін у форматі знімку:

  • Об'єкти та масиви друкуються з комами в кінці, щоб мінімізувати майбутні зміни знімків.
  • Ми видалили імена функцій зі знімків. Вони спричиняли проблеми з різними версіями Node, з інструментарієм покриття коду; ми, як правило, вважали, що зміна імені функції не входить до корисних даних для показу користувачеві.
  • Знімки сортуються в звичайному порядку сортування всередині файлі.

При оновленні до Jest 16, зміни можуть виглядати подібним чином: snapshots

Оновлення тестових бібліотек

Ми завершили міграцію тверджень з Jasmine в нові матчери Jest. Ми додали три нових матчери: toBeInstanceOf, toContainEqual та toThrowErrorMatchingSnapshot. Стало більше читабельних повідомлень про помилки для матчерів шпигунів/імітацій toHaveBeenLastCalledWith, toHaveBeenCalledWith, lastCalledWith та toBeCalledWith. Тепер, коли ми переписали всі твердження та розділили їх в окремі пакети, ми будемо працювати над тим, щоб зробити їх автономними, щоб вони могли бути інтегровані в будь-який тестовий фреймворк, якщо ви хочете використовувати їх поза Jest.

Також на прохання спільноти було додано нові псевдоніми. Щоб зфокусувати Jest на одному тесті, тепер ви можете використовувати it.only або test.only, або ж продовжити використання fit; Для пропуску тесту, додано it.skip та test.skip поряд з xit; щоб позначити тест паралельним, ви можете використовувати test.concurrent, що знадобиться у разі перевірки доступу до мережевих ресурсів або баз даних.

Нарешті, якщо ви хочете перевизначити глобальну expect на іншу бібліотеку тверджень, як chai, це можна зробити за допомогою параметра конфігурації setupTestFrameworkScriptFile.

Оновлення спільноти

За останній місяць було написано багато статей про функцію тестування знімками Jest, як мігрувати до Jest і як почати писати тести. Також я провів декілька відео стрімів, щоб пояснити, як працюють Jest та тестування знімками:

Багато людей написали статті про тестування знімками. Найбільш точною статтею, що сподобалась команді Jest, була Тестування з Jest Snapshots: Перші враження”. У своєму дописі, Ben відмітив три чудових моменти:

  1. Тестування знімками є доповненням для звичайних тестів, а не заміною.
  2. Тестування знімками є кориснішим в поєднанні зі здорових процесом перевірки коду.
  3. Тестування знімками добре співпрацює з автоімітацією.

Ми дуже рекомендуємо прочитати весь допис у блозі. Ben провів фантастичну роботу, пояснюючи причини, через які ми створили тестування знімками. Важливо відзначити, що ми не впроваджували тестування знімками на заміну всіх інших форм тестування, а скоріш як спосіб залучити розробників до написання тестів, які вони в іншому випадку не написали б. Воно добре працює для таких речей, як React компоненти, вивід командного рядка, повідомлення про помилки та багато інших, але не вирішує всіх проблем. Мета Jest - надати багато різних способів написання ефективних тестів без погіршення продуктивності чи простоти підтримки проєкту.

Інші пункти по тестуванню знімками:

Redux тепер використовує Jest і Max Stoiber написав посібник, як тестувати код, написаний з redux. Також існує відмінна інструкція написання тестів для MobX. Якщо ви використовуєте create-react-app, Jest тепер включений за замовчуванням. Kent C. Dodds створив багато відео на egghead.io, які допоможуть почати роботу з Jest.

Якщо ви використовуєте інші виконавці тестів, Kenneth Skovhus побудував чудову бібліотеку jest-codemods для автоматизації конверсій. Codemods прекрасні: вони дозволять вам швидко оцінити, чи буде Jest працювати у вашому випадку. Спробуйте!

Повний журнал змін можна знайти на GitHub. Jest 16 це дійсно результат зусиль спільноти JavaScript і проєкт зараз налічує понад 220 учасників. Ми дякуємо кожному з вас за вашу допомогу в покращенні цього проєкту.