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

Jest 16.0: Turbocharged CLI & Community Update

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

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

Оновлений CLI

reporter

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

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

  • New CLI flags were added: A --testNamePattern=pattern or -t <pattern> option was added to filter tests from the command line much like it.only or fit does in tests.
  • Попередньо провальні тести тепер завжди виконуються першими.
  • jest <pattern> is now case-insensitive to make it easier to filter test files.
  • Запуск тестів у режимі спостереження тепер можна переривати. During a test run, simply press any of the keys used for input during watch mode (a, o, p, q or enter) to abort a test run and start a new one.
  • The --bail flag now also works in watch mode. Враховуючи першочерговий запуск попередньо невдалих тестів, режим спостерігання Jest буде відчуватись надмоторним!
  • Jest now automatically considers files and tests with the jsx extension.
  • Jest попереджає про повторні ручні файли імітацій та ми вдосконалили автоматично створені імітації для ES модулів, скомпільованих за допомогою babel.
  • A jest.clearAllMocks function was added to clear all mocks in between tests.
  • We improved module resolution when moduleNameMapper is used.
  • Finally, a --findRelatedTests <fileA> <fileB> cli option was added to run tests related to the specified files. Це особливо корисно як хук перед комітом, якщо ви хочете запустити тести лише з вказаних файлів з відповідними тестами.

This is what Jest looks like when a test run is interrupted in watch mode: watch

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

Реалізація знімків Jest була повністю переписана. The new version of the jest-snapshot package is now structured in a way that allows for easier integration into other test runners and enables more cool integrations like with React Storybook. Jest не позначає знімки як застарілі в файлі з пропущеними або помилковими тестами. Ми також зробили ряд змін у форматі знімку:

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

When upgrading to Jest 16, the diff might look similar to this one: snapshots

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

Ми завершили міграцію тверджень з Jasmine в нові матчери Jest. We added three new matchers: toBeInstanceOf, toContainEqual and toThrowErrorMatchingSnapshot . We have more readable failure messages for the spy/mock matchers toHaveBeenLastCalledWith, toHaveBeenCalledWith, lastCalledWith and toBeCalledWith. Тепер, коли ми переписали всі твердження та розділили їх в окремі пакети, ми будемо працювати над тим, щоб зробити їх автономними, щоб вони могли бути інтегровані в будь-який тестовий фреймворк, якщо ви хочете використовувати їх поза Jest.

Також на прохання спільноти було додано нові псевдоніми. To make Jest focus on a single test you can now use either it.only or test.only or keep using fit; For skipping a test, it.skip or test.skip are now available alongside of xit; finally to define a test as concurrent you can use test.concurrent which is useful in case your test accesses network resources or databases.

Finally, if you'd like to overwrite the expect global with a different assertion library like chai, this can now be done using the setupTestFrameworkScriptFile configuration option.

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

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

Багато людей написали статті про тестування знімками. The most opinionated article that resonated with the Jest team was “Testing with Jest Snapshots: First Impressions”. У своєму дописі, Ben відмітив три чудових моменти:

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

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

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

Redux itself now uses Jest and Max Stoiber wrote a tutorial on how to test code written with redux. There is also a great guide on how to write tests for MobX. If you are using create-react-app, Jest is now included by default. Kent C. Dodds created a ton of videos on egghead.io that will help you get started with Jest.

If you are using other test runners, Kenneth Skovhus built an awesome jest-codemods library that will automate the conversion for you. Codemods прекрасні: вони дозволять вам швидко оцінити, чи буде Jest працювати у вашому випадку. Спробуйте!

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