Сьогодні ми оголошуємо про перехід до глобальних ревізій 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. Одне з найважливіших - значно зменшився час запуску, тож тепер нам не доводиться переживати за продуктивність.