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

🃏 Jest 19: Поглиблений режим спостереження & Покращення тестової платформи

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

Сьогодні ми із задоволенням публікуємо версію 19 платформи для тестування Jest. Це найбільший реліз Jest, який ми коли-небудь публікували, і ми дуже раді показати вам, що ми створили за останні два місяці:

Поглиблений режим спостереження

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

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

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

  • Ми прибрали префікс “test” в іменах знімків з верхнього рівня test або it викликів.
  • Ми покращили вивід елементів React, аби отримувати менше змін при змінах властивостей елементу.
  • Ми покращили механізм обходження символів для кращої захищеності.

До цього:

exports[`test snap 1`] = `
<header>
<h1>
Jest \"19\"
</h1>
<Subtitle
name="Painless JavaScript Testing" />
</header>
`;

Після (немає префікса "test", кращий JSX рендеринг, заголовок версії):

// Jest Snapshot v1, https://goo.gl/fbAQLP

exports[`snap 1`] = `
<header>
<h1>
Jest "19"
</h1>
<Subtitle
name="Painless JavaScript Testing"
/>
</header>
`;

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

snapshot-version

Переконайтеся, що ви скасували всі локальні зміни перед оновленням, аби зробити перехід безпроблемним і переконатись, що жодні небажані зміни від провальних тестів не були додані в нові знімки.

Вдосконалений вивід пропущених тестів

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

skipped-tests

Нові аргументи CLI

Jest 19 публікується з двома новими аргументами покриття, які ви можете запустити з командного рядка:

  • --collectCoverageFrom
  • --coverageDirectory

Тепер ми також виводимо неприпустимі аргументи CLI, не ігноруючи їх. Але ми допоможемо вам корисними повідомленнями про помилки(зразок наведено нижче); наприклад, коли ви намагаєтесь запустити jest --watch:

cli-error

Покращення expect

Ми наближуємось до майже повного паритету функцій в npm пакеті expect. Michael Jackson, автор пакету, погодився пожертвувати його проєкту Jest, що означає, що jest-matchers буде перейменовано на expect. Оскільки наша версія expect не розроблялась з урахуванням повної сумісності, Christopher Chedeau працює над codemod, щоб зробити перехідним безпроблемним. Christopher також працював над низкою покращень для jest-matchers, які дозволять використання поза межами Jest і навіть всередині браузерів.

eslint-plugin-jest – наш власний плагін ESLint

Завдяки Jonathan Kim, Jest нарешті має свій офіційний плагін ESLint. Він містить три правила:

  • no-disabled-tests - це правило запобігає випадковому внесенню вимкнутих тестів у зміни.
  • no-focused-tests - це правило запобігає внесенню в зміни фокус тестів, які вимкнули б інші тести цього набору.
  • no-identical-title - забороняє ідентичні заголовки в назвах тестів.

Ви можете встановити його за допомогою npm install --save-dev eslint-plugin-jest або yarn add --dev eslint eslint-plugin-jest, і він може бути включений шляхом додавання {"plugins": ["jest"]} до вашої конфігурації eslint.

Новий публічний пакет: jest-validate

Коли ми переробили код перевірки та нормалізації для конфігурації Jest, ми були настільки задоволені новими повідомленнями про помилки, що ми виділили його в окремий модуль, щоб поділитися з іншими. З Jest 19 ми раді додати jest-validate до нашої самостійної родини пакетів.

jest-validate - це узагальнений інструмент перевірки конфігурації, який допоможе вам попередженнями, помилками та повідомленнями про застарілість в вашому інструменті JavaScript. Він також здатен показувати зручні для користувачів приклади правильних налаштувань та надає простий, але потужний API. Сподіваємось, це стане гарним доповненням до ваших проєктів!

validate

Ми раді повідомити, що jest-validate перевіряє параметри конфігурації prettier, починаючи з v0.12. Додавайте його до свого проєкту, спробуйте, надішліть нам відгук та допомагайте з покращенням, роблячи запити на ухвалення змін на GitHub.

Вдосконалені асиметричні матчери

Ми перемістили асиметричну реалізацію матчерів з Jasmine в Jest, що дало змогу надалі покращувати користувацький досвід. Як результат, асиметричні матчери тепер краще форматуються, ми додали новий матчер expect.stringContaining(), а також пов'язали їх з expect.toMatchObject(), тож ви можете використовувати найкраще поєднання:

asymmetric-matchers

Кращі ручні імітації

З останнім релізом, ручні імітації нарешті працюють з вкладеними каталогами. Наприклад, __mocks__/react-native/Libraries/Text/Text.js тепер будуть працювати як очікується та створювати правильний модуль. Ми також виправили проблеми з віртуальними імітаціями й перехідними залежностями, а також вдосконалили moduleNameMapper, щоб імітації не перезаписувались, якщо багато шаблонів завершуються одним і тим самим файлом.

Важливі Зміни

Під час чисток та виправлень, ми видалили параметр конфігурації mocksPattern, який офіційно ніколи не підтримувався. Ми також перейменували параметр конфігурації testPathDirs на roots, що краще пояснює, як його можна використати. Для roots, конфігурацією за замовчуванням є ["<rootDir>"] і може бути змінена для внесення будь-якої кількості каталогів. Параметр конфігурації rootDir завжди використовувався в основному як маркер для інших параметрів, тож це перейменування має зробити процес налаштування Jest зрозумілішим.

Оновлена документація

Як ви вже могли бачити, Hector Ramos і Kevin Lacke надали документації Jest новий вигляд. Ми змінили спосіб організації сайту, тепер Документація та API представлені окремими сторінками:

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

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

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

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

Цей допис був написаний Rogelio Guzman та Michał Pierzchal.