Jest
February 17, 2024
Jest начало или первый тест
Установка
Тебе понадобятся следующие npm-зависимости:
- jest - CLI утилита для запуска тестов
- @jest/globals - библиотека предоставляющая API для написания модульных тестов
В случаи, если кодовая база написана на TypeScript, то понадобятся дополнительные зависимости, чтоб транспилировать ts-файлы с тестами
- @types/jest - типы для всех методов jest api (@jest/globals)
- ts-jest - преобразует ts-тесты в js
- ts-node - позволяет запускать ts-файлы в среде node.js так, будто это привычные этой среде js файлы
Настройка
Конфигурация jest.config.js
const config: JestConfigWithTsJest = {
collectCoverage: true,
coverageDirectory: "coverage",
coverageProvider: "v8",
moduleDirectories: ["node_modules"],
moduleNameMapper: pathsToModuleNameMapper(compilerOptions.paths),
preset: "ts-jest",
};- collevtCoverage, coverageDirectory и coverageProvider - для красивого вывода таблицы с результатом запуска тестов
- moduleDirectories - список путей в файловой системе проекта, где анализ и поиск файлов с тестами будет проигнорирован, логичное значение будет в самом начале - node_module
- moduleNameMapper - если у вас кодовая база на TypeScript и вы используете alias paths, то для правильного разрешения модулей с такими спецификаторами (установленные в paths) можно указать ассоциативный объект. Например:
"paths": {
"@/modules/*": ["<rootDir>/src/modules/*"]
}- preset - название npm-пакета, в котором есть файл
jest-preset.jsonилиjest-preset.js, jest-preset.cjs, jest-preset.mjs, в которых присутствуют опции конфигурации jest, как правило одобряемые большинством комьюнити.
Jest CLI в npm scripts
"scripts": {
"test": "jest --no-cache"
},Первый unit-тест
Создадим простой модуль, в которой будет чистая функция, возвращающая результат сложения двух чисел.
src/modules/sum.ts
export function sum(a: number, b: number): number {
return a + b;
}Теперь создадим файл с первый тестом
src/tests/sum.spec.ts
import { sum } from "@/modules/sum";
import { describe, it, expect } from "@jest/globals";describe("sum", () => {
it("3 + 2 = 5", () => {
expect(sum(3, 2)).toBe(5);
});
});Здесь с помощью describe мы можем, для дальнейшего вывода в консоли, определить название модуля, которые мы будем дальше тестировать
С помощью it мы создаем первый тест с обычным сопоставлением (expect) полученного результата вызовом функции sum и ожидаемым результатом через toBe
Запускаем наш первый тест!> yarn test
И вот результат 😍