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

Jest 11.0

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

Сьогодні ми оголошуємо про перехід до глобальних ревізій Jest, першим великим релізом яких стане Jest 11.0. Jest використовувався розробниками Facebook та нашими безперервними системами інтеграції роками та ми вважаємо, що Jest вже давно вийшов за рамки “релізу 1.0”. Схожі зміни зробила команда React.

Якщо ви користуєтесь Jest 0.9 або Jest 0.10, оновлення має пройти без проблем. Всі зміни за останні кілька місяців було внесено в Jest 11.0.

Нове у Jest 11.0

Інтеграція з Babel і спрощене налаштування

babel-jest додано в оновлений модульний репозиторій Jest та безперешкодно інтегровано в Jest. Якщо ви оновлюєте стару версію Jest або намагаєтесь додати Jest, ми рекомендуємо прочитати інструкцію для початку роботи.

Раніше Jest надавав API, наприклад, jest.dontMock, які попереджували імітацію модуля, який згодом очікувався в функції require. Тестування коду зазвичай виглядало так:

jest.dontMock('LikeButton');
const LikeButton = require('LikeButton'); // LikeButton не імітується

Однак разом з операторами імпорту ES2015 це більше не працює. За специфікацію, import спливають у верхню частину свого блоку коду. Приклад коду:

jest.dontMock('LikeButton');
import LikeButton from 'LikeButton';

під час виконання, насправді буде запущений в такому порядку:

import LikeButton from 'LikeButton'; // Відбувається до виклику dontMock.
jest.dontMock('LikeButton');

Модуль LikeButton буде імітовано, попри те, що ми відверто викликали dontMock.

Коли останні версії Jest та babel-jest використовуються разом, виклики нових API jest.unmock, jest.mock, jest.disableAutomock та jest.enableAutomock спливають у верхню частину їхнього блоку, перед твердженнями імпорту ES2015.

jest.unmock('LikeButton');
import LikeButton from 'LikeButton'; // LikeButton не імітується належним чином!

Покращення (Авто)Імітацій

Ми зробили численні покращення та виправили помилки опції автоімітації Jest, покращили підтримку npm3 та додали нові API ручних імітацій. Багато людей висловлювали бажання використовувати Jest з вимкнутою функцією автоімітації. Додано глобальний параметр конфігурації automock, якому можна встановити значення false.

Для спрощення ручної імітації ми також додали два нових API. jest.mock визначає заводську ручну імітацію для певного тесту:

// Створення імітації для гіпотетичного модуля "sum".
jest.mock('sum', () => {
return (a, b) => a + b;
});

const sum = require('sum');
sum(1, 4); // 5

А jest.fn було додано для полегшення створення функцій-імітацій:

// Створення функції-імітації
const mockFn = jest.fn(() => 42);
mockFn(); // 42
expect(mockFn.calls.length).toBe(1);

Продуктивність

Нещодавно ми писали про покращення продуктивності, які ми зробили в Jest. Одне з найважливіших - значно зменшився час запуску, тож тепер нам не доводиться переживати за продуктивність.

Jasmine та покращення тестових тверджень

Коли Jest мав відкритий вихідний код, він публікувався з Jasmine 1. Jest був розроблений для роботи з будь-якими бібліотеками тестових тверджень та опціональною підтримкою Jasmine 2, яку було додано зовнішнім внеском в кінці минулого року. Ця зміна забезпечує кращу продуктивність та надає кращі API для попередньої версії Jasmine. Таким чином, ми конвертували всі наші JavaScript тести у Facebook на Jasmine 2. В Jest 11 ми встановлюємо Jasmine 2 опцією за замовчуванням. Jasmine 1 можна увімкнути через опцію конфігурації testRunner.

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

Інші зміни

Команда jest --watch була перезаписана та вдосконалена. За замовчуванням, зараз вона запускає лише тести, пов'язані зі зміненими файлами. Якщо ви хочете запускати кожен раз всі тести, ви можете використовувати jest --watch=all. Також було покращено вивід докладного журналу, додано більше допоміжних попереджень і повідомлень про помилки. Ми додали опцію конфігурації testEnvironment для налаштування тестового середовища. Наприклад, при створенні сервісу node, можна використовувати спеціальне node середовище замість jsdom. Також, сайт і вся документація були повністю переписані.

Усі зміни за останні кілька місяців можна знайти в CHANGELOG.

Внески та майбутнє Jest

За останні шість місяців Jest пережив значні зміни, внесені величезною кількістю нових учасників. Я хотів би подякувати всім людям, які зробили внесок в наш відкритий вихідний код, та співробітникам Facebook за їхню допомогу в покращенні Jest для всіх користувачів. Нові учасники: Alexander Juarez, Christian Lentfort, Cristian Carlesso, Dan Abramov, Dmitrii Abramov, Evan Jacobs, James Friend, James Ide, Jeff Carpenter, Joe Lencioni, Michael Diolosa, Nik Graf, Pavel Prokopenko, Pavel Volokitin, Sebastian Mayr та ShihChi Huang.

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