Jest — это фреймворк для тестирования, разработанный командой Facebook, который широко используется для тестирования JavaScript-приложений. Он предоставляет простой, удобный и мощный интерфейс для создания юнит-тестов, тестов интеграции и моков. Один из лучших способов начать изучать Jest — это создать первый тест, например, для простейшей функции.
Перед тем как написать тест, необходимо установить Jest в проект. Это
можно сделать через npm или yarn.
npm install --save-dev jest
Или с использованием yarn:
yarn add --dev jest
После установки необходимо добавить в файл package.json
скрипт для запуска Jest:
"scripts": {
"test": "jest"
}
Теперь можно запускать тесты командой:
npm test
Для начала создадим простую функцию, которую будем тестировать. Пусть это будет функция, возвращающая строку “Hello, World!”.
// hello.js
function helloWorld() {
return "Hello, World!";
}
module.exports = helloWorld;
Теперь напишем тест для этой функции. В Jest тесты обычно размещаются
в отдельных файлах с суффиксом .test.js или
.spec.js. Создадим файл с именем
hello.test.js:
// hello.test.js
const helloWorld = require('./hello');
test('returns Hello, World!', () => {
expect(helloWorld()).toBe('Hello, World!');
});
В данном примере:
helloWorld с помощью
require.test(), который определяет сам тест.
Первый аргумент — это описание теста, второй — функция, которая
выполняет сам тест.expect(), который
проверяет результат работы функции. В данном случае мы проверяем, что
вызов helloWorld() возвращает строку “Hello, World!” с
помощью метода toBe().После написания теста можно запустить его через команду:
npm test
Jest автоматически найдет все тесты, начиная с файлов, имеющих
суффикс .test.js, и выполнит их. Если тест прошел успешно,
в терминале будет выведено сообщение о том, что все тесты прошли.
Jest использует несколько основных методов для организации и выполнения тестов:
test(name, fn) — определяет отдельный тест. Имя теста —
это строка, описывающая проверку, а функция fn содержит сам
код теста.expect(value) — утверждение, которое проверяет, что
значение соответствует ожидаемому результату.toBe(value) — проверка на точное совпадение
значения.Эти базовые конструкции позволяют создавать простые тесты, но Jest предоставляет гораздо больше возможностей для сложных проверок, таких как асинхронные тесты, мокинг и тестирование исключений.
В Jest можно также тестировать ситуации, когда код вызывает ошибки
или исключения. Для этого используются методы, такие как
toThrow():
function throwError() {
throw new Error('Something went wrong');
}
test('throws error', () => {
expect(() => throwError()).toThrow('Something went wrong');
});
В данном случае тестируетс, что функция throwError()
действительно выбрасывает ошибку с нужным сообщением.
Jest предоставляет мощные возможности для создания моков (подделок) и шпионов. Это особенно полезно, когда необходимо изолировать тестируемую функцию от других частей системы.
Для мока функции можно использовать jest.fn():
const mockFunction = jest.fn();
mockFunction.mockReturnValue('Mocked Value');
test('mock function test', () => {
expect(mockFunction()).toBe('Mocked Value');
});
Здесь мы создаем мок-функцию с помощью jest.fn(), а
затем задаем для неё возвращаемое значение с помощью метода
mockReturnValue(). В тесте проверяем, что мок-функция
возвращает правильное значение.
Jest поддерживает тестирование асинхронного кода с использованием
промисов или асинхронных функций. Чтобы тестировать асинхронные
операции, можно использовать async/await или
методы done().
Пример теста для асинхронной функции:
function fetchData() {
return new Promise((resolve) => {
setTimeout(() => resolve('Data received'), 1000);
});
}
test('fetches data', async () => {
const data = await fetchData();
expect(data).toBe('Data received');
});
В этом примере асинхронная функция fetchData возвращает
промис. Мы используем async/await в тесте для
ожидания завершения промиса перед выполнением проверки.
Как правило, тесты размещаются в каталоге __tests__ или
рядом с исходными файлами. Это помогает организовать код и тесты, а
также облегчить навигацию.
Пример структуры проекта:
/src
/hello.js
/__tests__
/hello.test.js
Также возможна структура, когда тесты находятся рядом с кодом, который они проверяют, например:
/src
/hello.js
/hello.test.js
Написание тестов с использованием Jest начинается с простых и понятных примеров, таких как тестирование функции, возвращающей строку. Jest предоставляет множество инструментов для проверки синхронных и асинхронных функций, мокирования зависимостей и тестирования ошибок. Создание первых тестов помогает понять основные принципы работы с Jest и подготовиться к более сложным задачам в тестировании JavaScript-кода.