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

Jest 23: 🔥 Неймовірно Швидке Приємне Тестування

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

Сьогодні ми з радістю анонсуємо Jest 23, наш найбільший великий реліз станом на сьогодні! Разом із понад 100 учасниками, ми публікуємо купу оновлень та виправлень помилок. Дякуємо всім у спільноті за допомогу в Покращенні JavaScript Тестування.

Ми також хотіли б привітати Babel і webpack з вступом до спільноти Jest! Після переходу з Mocha на Jest 23 Beta, webpack отримав зменшення загального часу виконання тестових наборів в 6 разів, з 13 хвилин до 2 хв 20 секунд. #blazingmeansgood

Ось деякі з Jest 23 новинок і принципових змін.

Для повного списку дивіться журнал змін.

Інтерактивний режим знімка

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

Interactive snapshot mode in action

Подивіться документацію Інтерактивного режиму знімків тут.

Матчери властивостей знімків

Часто об'єкти, які ви знімаєте, містять згенеровані значення, такі як дати та ID. Jest тепер дозволяє передавати властивості в матчери знімків, які визначають структуру даних замість конкретних значень. Ці матчери властивостей будуть перевірені перш ніж серіалізувати тип матчера (замість значення), надаючи вам послідовні результати знімків виконання тестів.

Матчери властивостей знімків

Для додаткової інформації дивіться оновлену toMatchSnapshot документацію або посібник Property Matcher.

Користувальницькі асинхронні матчери

Тепер ми підтримуємо асинхронні матчери за допомогою expect.extends! Асинхронні матчери повертають проміс, щоб ви могли очікувати на виконання матчера. Для прикладу:

Custom asynchronous matchers in action

Документи доступні тут.

Користувацькі асиметричні матчери

Асиметричні матчери є відмінним інструментом, якщо ви дбаєте тільки про асиметричну рівність. Наприклад, коли ліва сторона повинна бути об'єктом з деяким підмножиною властивостей праворуч замість точного збігу. Jest надає ряд вбудованих асиметричних матчерів, і в цьому релізі ми додаємо користувацькі асиметричні матчери.

Custom asymmetric matchers in action

Jest Each

@mattphillipsio пожертвував пакет jest-each для Jest Core (дякуємо, Matt!). jest-each - це бібліотека, натхнена mocha-each та Spock Таблицями даних, яка дозволяє визначити таблицю тестових випадків, а потім запустити тест для кожного рядка з вказаними значеннями стовпців. Ми підтримуємо обидва типи масивів, шаблонні літерали всіх видів describe та test. Документи доступні тут, а для тих, хто ще не перейшов на Jest 23, ми опублікуємо jest-each окремо!

jest-each in action

Окремо дякуємо Prettier за надшвидкі правки таблиць форматування (зверніть увагу на Prettier 1.13)!

Нові матчери

Ми додаємо матчери в основний проєкт, тільки якщо віримо в їх користь для великої кількості людей спільноти Jest, залишаючи більшість матчерів доступними спільноті (див. jest-extended). Деякі матчери потрапили в основний склад з Jest 23:

  • nthCalledWith
  • toReturn
  • toReturnTimes
  • toReturnWith
  • lastReturnedWith
  • nthReturnedWith
  • toStrictEqual

New matchers in action

Оновлена документація expect доступна тут.

Налагодження зависання тестів

Розповсюджена проблема, яку ми помітили, стосується моменту зависання Jest після виконання тестів. Зазвичай, це стається через програмний код, який залишає відкриті елементи керування, заважаючи завершенню роботи Jest. Раніше, користувачі обходили це, використовуючи --forceExit (не рекомендується).

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

Detecting hanging tests

Також ми надаємо новий прапорець --detectOpenHandles, що допоможе знайти відкриті елементи керування:

Running detectOpenHandles

Оновлена документація CLI доступна тут.

Плагіни режиму спостереження

Ми повністю переписали систему режиму спостереження, що дозволить додавати користувацькі плагіни в цей режим. Тепер плагіни режиму спостереження дозволяють підключатись в події Jest та надавати користувацькі опції в Меню режиму спостереження. Всі питання Режиму спостереження за замовчуванням реалізовані в системі у вигляді плагінів; документацію щодо створення власного плагіну можна знайти тут.

У результаті цієї зміни ми мали змогу повернути підтримку попереднього введення у вигляді плагіну режиму спостереження за допомогою jest-watch-typeahead!

Typeahead plugin in action

Перегляньте jest-watch-typeahead для документації та інструкцій щодо встановлення. Велика дяка @rogeliog за нову систему плагінів режиму спостереження та плагін jest-watch-typeahead!

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

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

  • Обов'язкові тестові опис і функції: Тести, які не містять функцію та опис, будуть провальними.
  • Видалені невизначені властивості React: Менші знімки та належна поведінка React.
  • Видалені застарілості: Ми видалили непотрібний mapCoverage. Додатково, ми видалили jest.genMockFunction та jest.genMockFn, бо вони практично дублюють jest.fn.
  • Додані імена провальних знімків: Ми додали імена знімків (якщо надано) в повідомлення провальних знімків, аби легше їх відстежувати.
  • Заміна імітацій позначок часу: Ми замінили імітації позначок часу на invocationCallOrder, бо імітації часто можуть мати однакові позначки, що робить тестування порядку виклику неможливим.
  • Додано результати в імітації знімків: Ми додали результати виклику функцій-імітацій в знімки для відстеження викликів та результатів.

Інші покращення

  • Покриття режиму спостереження: Покриття обмежується файлам, що тестуються в режимі спостереження, або використанням --onlyChanged та --findRelatedTests.
  • Документація версій: Додано документацію для кожної проміжної версії, починаючи з Jest 22, та видалено всі “Вимагає Jest X.X+” з документації.
  • Кращі підсумки знімків: Ми переробили вивід Підсумку Знімків, щоб зробити застарілі знімки більш інформативними.
  • Покращене трасування стеку: Ми додали трасування стеку в асинхронні помилки, помилки перевищення часу, expect.assertions та викинуті не-помилки. Також ми вказуємо стовпець в коді фрейму!
  • Краща підтримка React 16: Додано підтримку знімків для React.Fragment, React.forwardRef, та React.createContext.
  • Відстеження повернень та викинутих значень імітацій: Додано mock.results, що містить повернене чи викинуте значення для кожного виклику імітації.
  • Запал🔥: ми додали значок вогника в README, щоб показати, що Jest по-справжньому запальний.

Саміт Jest

Минулого тижня команда Jest зустрілася на саміті Jest у Facebook, Лондон, де розробляли та випустили Jest 23, оголосивши про Jest Open Collective та виступивши з кількома промовами:

Повні виступи можна подивитись тут.

Все пройшло чудово, ми змогли персонально зустрітись з лондонською частиною спільноти. Дякуємо усім, хто долучився, за вашу постійну підтримку! Очікуйте наш наступний допис щодо Jest Open Collective та планів на майбутнє.

_Як завжди, цей реліз не відбувся б, якби не спільнота JavaScript. Ми безмежно вдячні за можливість покращувати тестування JavaScript разом з вами. Якщо ви хотіли б зробити свій внесок у Jest, будь ласка, звертайтесь до нас на _ _GitHub чи _ Discord.