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

package.json

"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
И вот результат 😍