Перейти к основному содержимому

Что такое модульный тест

Модульный тест — это небольшая программа, которая проверяет одну часть вашего кода, обычно одну функцию. Тесты запускают после каждого изменения: если изменение что-то сломало, тест сообщит вам об этом сразу же, раньше ваших пользователей.

Дополнительная библиотека не нужна. В Node.js есть встроенное средство запуска тестов: модуль node:test регистрирует тесты, модуль node:assert/strict проверяет значения, а флаг --test их запускает.

Тесты также делают изменения безопасными: с хорошими тестами вы можете переписать функцию и за секунды узнать, ведёт ли она себя по-прежнему.


Файлы тестов и тестовые случаи

Тест делают тестом две вещи:

1. Имя файла заканчивается на .test.ts: для add.ts вы пишете add.test.ts. Средство запуска тестов ищет файлы с такими именами и запускает только их.
2. Тест регистрируется вызовом: test("name", fn), импортированным из node:test. Имя — это произвольный текст, поэтому им может быть целое предложение: не нужно запоминать никаких префиксов в именах.

Внутри теста вы вызываете функцию, сравниваете то, что получили, с тем, что ожидали, и позволяете assert сообщить о разнице. Непройденная проверка выбрасывает ошибку, и средство запуска помечает тест как непройденный. Если ничего не выброшено, тест пройден.

Первый пройденный тест

add(2, 3) сравнивается с 5. Значения совпадают, поэтому assert.equal молчит и тест проходит. Средство запуска выводит для теста одну строку с ✔, а в сводке ниже — pass 1.

Prompt
Напишите файл теста на TypeScript с функцией add, которая складывает два числа, и одним тестом, зарегистрированным через test() из node:test, который проверяет, что add(2, 3) равно 5, с помощью assert.equal и сообщения вида «получено/ожидалось». Покажите вывод его запуска встроенным средством запуска тестов с репортёром spec.
Вывод: программа на TypeScript и захваченный вывод
A first passing test

Непройденный тест

В этой функции add есть ошибка — она умножает. Тест её ловит: запуск выводит строку с ✖ и fail 1, а затем отчёт с нашим собственным сообщением add(2, 3) = 6; ожидалось 5 и двумя значениями, 6 !== 5.

Prompt
Напишите файл теста на TypeScript, в котором функция add содержит ошибку (она умножает вместо сложения), а тест по-прежнему ожидает, что add(2, 3) равно 5. Покажите реальный вывод непройденного теста от встроенного средства запуска тестов, включая отчёт о проверке.
Вывод: программа на TypeScript и захваченный вывод

Запуск тестов

Тесты запускает команда node --test. Если указать имя файла, она запустит этот файл; если не указать ничего, она найдёт в папке файлы, похожие на тесты, и запустит их все.

Репортёр решает, сколько вы увидите. --test-reporter=spec перечисляет каждый тест по имени со знаком ✔ или ✖ перед ним, и именно такой вид используется во всём этом учебнике. Строки сводки ниже начинаются с ℹ и подсчитывают, сколько тестов было запущено, пройдено и не пройдено.

Два теста, оба показаны по имени

В файле есть две небольшие функции и по одному тесту для каждой. Репортёр показывает оба теста по имени, так что видно, что оба запустились и оба прошли: в сводке указано tests 2 и pass 2.

Prompt
Напишите файл теста на TypeScript с двумя небольшими функциями, double и half, и одним тестом для каждой. Покажите вывод репортёра spec, где оба теста показаны по имени и оба проходят.
Вывод: программа на TypeScript и захваченный вывод