Сьогодні ми з радістю анонсуємо Jest 23, наш найбільший великий реліз станом на сьогодні! Разом із понад 100 учасниками, ми публікуємо купу оновлень та виправлень помилок. Дякуємо всім у спільноті за допомогу в Покращенні JavaScript Тестування.
Ми також хотіли б привітати Babel і webpack з вступом до спільноти Jest! Після переходу з Mocha на Jest 23 Beta, webpack отримав зменшення загального часу виконання тестових наборів в 6 разів, з 13 хвилин до 2 хв 20 секунд. #blazingmeansgood
Ось деякі з Jest 23 новинок і принципових змін.
Для повного списку дивіться журнал змін.
Інтерактивний режим знімка
Ми додали нову опцію меню спостереження за замовчуванням під назвою Інтерактивний режим знімка. Цей новий режим дозволяє вам проходитись через кожен невдалий знімок в кожному провальному наборі, аби переглянути та обрати оновити або пропустити кожен окремо.
Подивіться документацію Інтерактивного режиму знімків тут.
Матчери властивостей знімків
Часто об'єкти, які ви знімаєте, містять згенеровані значення, такі як дати та ID. Jest тепер дозволяє передавати властивості в матчери знімків, які визначають структуру даних замість конкретних значень. Ці матчери властивостей будуть перевірені перш ніж серіалізувати тип матчера (замість значення), надаючи вам послідовні результати знімків виконання тестів.
Для додаткової інформації дивіться оновлену toMatchSnapshot
документацію або посібник Property Matcher.
Користувальницькі асинхронні матчери
Тепер ми підтримуємо асинхронні матчери за допомогою expect.extends
! Асинхронні матчери повертають проміс, щоб ви могли очікувати
на виконання матчера. Для прикладу:
Документи доступні тут.
Користувацькі асиметричні матчери
Асиметричні матчери є відмінним інструментом, якщо ви дбаєте тільки про асиметричну рівність. Наприклад, коли ліва сторона повинна бути об'єктом з деяким підмножиною властивостей праворуч замість точного збігу. Jest надає ряд вбудованих асиметричних матчерів, і в цьому релізі ми додаємо користувацькі асиметричні матчери.
Jest Each
@mattphillipsio пожертвував пакет jest-each
для Jest Core (дякуємо, Matt!). jest-each
- це бібліотека, натхнена mocha-each
та Spock Таблицями даних, яка дозволяє визначити таблицю тестових випадків, а потім запустити тест для кожного рядка з вказаними значеннями стовпців. Ми підтримуємо обидва типи масивів, шаблонні літерали всіх видів describe
та test
. Документи доступні тут, а для тих, хто ще не перейшов на Jest 23, ми опублікуємо jest-each
окремо!
Окремо дякуємо Prettier за надшвидкі правки таблиць форматування (зверніть увагу на Prettier 1.13)!
Нові матчери
Ми додаємо матчери в основний проєкт, тільки якщо віримо в їх користь для великої кількості людей спільноти Jest, залишаючи більшість матчерів доступними спільноті (див. jest-extended). Деякі матчери потрапили в основний склад з Jest 23:
- nthCalledWith
- toReturn
- toReturnTimes
- toReturnWith
- lastReturnedWith
- nthReturnedWith
- toStrictEqual
Оновлена документація expect доступна тут.
Налагодження зависання тестів
Розповсюджена проблема, яку ми помітили, стосується моменту зависання Jest після виконання тестів. Зазвичай, це стається через програмний код, який залишає відкриті елементи керування, заважаючи завершенню роботи Jest. Раніше, користувачі обходили це, використовуючи --forceExit
(не рекомендується).
Аби допомогти відстежувати подібні проблеми, відтепер ми знаходимо моменти, на яких Jest не завершує свою роботу:
Також ми надаємо новий прапорець --detectOpenHandles
, що допоможе знайти відкриті елементи керування:
Оновлена документація CLI доступна тут.
Плагіни режиму спостереження
Ми повністю переписали систему режиму спостереження, що дозволить додавати користувацькі плагіни в цей режим. Тепер плагіни режиму спостереження дозволяють підключатись в події Jest та надавати користувацькі опції в Меню режиму спостереження. Всі питання Режиму спостереження за замовчуванням реалізовані в системі у вигляді плагінів; документацію щодо створення власного плагіну можна знайти тут.
У результаті цієї зміни ми мали змогу повернути підтримку попереднього введення у вигляді плагіну режиму спостереження за допомогою jest-watch-typeahead!
Перегляньте 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 та виступивши з кількома промовами:
- Christoph Nakazawa – Вступ
- Aaron Abramov – Написання Важливих Тестів
- Rick Hanlon II – Блискавично Швидке Тестування Знімками в Jest 23
- Simen Bekkhus – Чудові Повідомлення Помилок Jest
- Matt Phillips – Покращ свій досвід використання Jest пакетами спільноти
- Michele Bertoli – Знімайте Все
- Jordan Eldredge – Webamp: Навчайся Імітуючи
Повні виступи можна подивитись тут.
Все пройшло чудово, ми змогли персонально зустрітись з лондонською частиною спільноти. Дякуємо усім, хто долучився, за вашу постійну підтримку! Очікуйте наш наступний допис щодо Jest Open Collective та планів на майбутнє.
Як завжди, цей реліз не відбувся б, якби не спільнота JavaScript. Ми безмежно вдячні за можливість покращувати тестування JavaScript разом з вами. Якщо ви хотіли б зробити свій внесок у Jest, будь ласка, звертайтесь до нас на GitHub чи Discord.