Jest 11.0
Сьогодні ми оголошуємо про перехід до глобальних ревізій Jest, першим великим релізом яких стане Jest 11.0. Jest використовувався розробниками Facebook та нашими безперервними системами інтеграції роками та ми вважаємо, що Jest вже давно вийшов за рамки “релізу 1.0”. This is similar to a change the React team has made.
Якщо ви користуєтесь Jest 0.9 або Jest 0.10, оновлення має пройти без проблем. Всі зміни за останні кілька місяців було внесено в Jest 11.0.
Нове у Jest 11.0
Інтеграція з Babel і спрощене н алаштування
babel-jest was adopted within the newly modularized Jest repository and it is now seamlessly integrated into Jest. If you are upgrading from an older version of Jest or are looking to adopt Jest, we recommend reading the Getting Started guide.
Previously Jest provided APIs such as jest.dontMock which unmocks a module that is subsequently being required using the require function. Тестування коду зазвичай виглядало так:
jest.dontMock('LikeButton');
const LikeButton = require('LikeButton'); // LikeButton не імітується
Однак разом з операторами імпорту ES2015 це більше не працює. Per the specification imports are hoisted to the top of their code block. Приклад коду:
jest.dontMock('LikeButton');
import LikeButton from 'LikeButton';
під час виконання, насправді буде запущений в такому порядку:
import LikeButton from 'LikeButton'; // This happens before the dontMock call.
jest.dontMock('LikeButton');
The LikeButton module would therefore be mocked even though we explicitly call dontMock.
When the latest versions of Jest and babel-jest are used together, calls to the new APIs jest.unmock, jest.mock, jest.disableAutomock and jest.enableAutomock are hoisted to the top of their block, before ES2015 import statements.
jest.unmock('LikeButton');
import LikeButton from 'LikeButton'; // LikeButton не імітується належним чином!
Покращення (Авто)Імітацій
Ми зробили численні покращення та виправили помилки опції автоімітації Jest, покращили підтримку npm3 та додали нові API ручних імітацій. Багато людей висловлювали бажання використовувати Jest з вимкнутою функцією автоімітації. A global configuration option automock, which can be set to false, was added.
Для спрощення ручної імітації ми також додали два нових API. jest.mock specifies a manual mock factory for a specific test:
// Implement a mock for a hypothetical "sum" module.
jest.mock('sum', () => {
return (a, b) => a + b;
});
const sum = require('sum');
sum(1, 4); // 5
And jest.fn was added to make it easier to create mock functions:
// Create a mock function
const mockFn = jest.fn(() => 42);
mockFn(); // 42
expect(mockFn.calls.length).toBe(1);
Продуктивність
We recently wrote about some performance improvements we've made in Jest. Одне з найважливіших - значно зменшився час запуску, тож тепер нам не доводиться переживати за продуктивність.
Jasmine та покращення тестових тверджень
Коли Jest мав відкритий вихідний код, він публікувався з Jasmine 1. Jest was designed to work with any test assertion library and optional Jasmine 2 support was added through an external contribution at the end of last year. Ця зміна забезпечує кращу продуктивність та надає кращі API для попередньої версії Jasmine. Таким чином, ми конвертували всі наші JavaScript тести у Facebook на Jasmine 2. В Jest 11 ми встановлюємо Jasmine 2 опцією за замовчуванням. Jasmine 1 can be enabled through the testRunner configuration option.
Ми також зробили багато оновлень щодо Jasmine. Повідомлення про помилки користувацьк их матчерів, наданих для функцій-імітацій Jest, були покращені та тепер також працюють для шпигунів Jasmine. Skipped tests, when using fit or fdescribe, are now properly reported at the end of a test run.
Інші зміни
The jest --watch command has been rewritten and improved. За замовчуванням, зараз вона запускає лише тести, пов'язані зі зміненими файлами. If you want to run all tests on every change, you can run jest --watch=all. Також було покращено вивід докладного журналу, додано більше допоміжних попереджень і повідомлень про помилки. We added a testEnvironment configuration option to customize the test environment. For example, when building a node service, a special node environment instead of jsdom can be used. Також, сайт і вся документація були повністю переписані.
All changes from the past few months can be found in the 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 однією командою.
