Jest
February 17
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