Настройте свои тесты и приступайте
Node.js имеет ряд пакетов на npm, которые упрощают процесс написания тестов. В этом руководстве мы используем два самых популярных модуля Node, доступных для тестирования: Mocha и Chai.
Mocha - это основная среда тестирования в этом наборе тестов. Он предоставляет функции для выполнения тестов и обработки записи результатов тестов в терминал. Chai - это библиотека утверждений, обычно используемая с Mocha. Мы используем утверждения, чтобы убедиться, что тестируемый компонент возвращает значение, которое он ожидает вернуть для конкретного тестового примера.
Как вы увидите в модульных тестах, которые мы пишем в этом руководстве, такие функции, как it
и describe
, являются частью Mocha. Утверждения, которые мы делаем внутри этих функций, например expect(isSuccess).to.be.true
, взяты из библиотеки Chai.
Настройте среду тестирования
Прежде чем продолжить, создайте новый проект Node.js, если у вас его еще нет. Затем установите библиотеки Mocha и Chai и сохраните их как зависимости dev в файл package.json
с помощью этой команды:
npm install mocha chai --save-dev
Затем измените тестовый сценарий файла package.json
на этот:
"scripts": {
"test": "mocha"
},
Это позволяет нам запускать тесты с помощью команды npm test
в командной строке.
Вам также следует создать новый каталог с именем test
. Здесь будут храниться все наши тестовые файлы. Обратите внимание, что вы должны использовать точное имя «test» для каталога, поскольку Mocha ищет каталог с этим именем для запуска тестов.
На данный момент каталог нашего проекта имеет такую структуру папок:
|test
|src
|node_modules
package.json
Базовый формат теста Mocha
Типичный тестовый файл в Mocha имеет следующую форму:
Формат теста с крючками для мокко
Mocha предоставляет хуки, которые мы можем запускать до и после каждого тестового примера или всех тестовых примеров. Они есть:
before()
: Логика внутри этого хука запускается перед всеми тестовыми примерами в наборе тестов.after()
: Логика внутри этого выполняется после всех тестовых случаев.beforeEach()
: внутренняя логика запускается перед каждым тестом в коллекции.afterEach()
: Логика внутри него запускается после каждого тестового примера.
Написание вашего первого модульного теста
Чтобы написать первый модульный тест с использованием Mocha и Chai, сначала давайте создадим простую функцию с именем isNumValid
, которая возвращает true для значений от десяти до 70 и возвращает false для значений больше или равных 70 и меньше или равных десяти.
Теперь мы можем написать тесты, чтобы проверить поведение этой функции. Мы создаем новый файл внутри тестового каталога с именем validator.js
, чтобы написать этот тест.
Вы должны импортировать файл validator.js
в наш тестовый файл, чтобы получить доступ к тестируемой функции. В нашем случае функция записана в файле validator.js
внутри каталога src
.
В дополнение к стилю утверждения expect
, который мы использовали здесь, Chai предоставляет два других стиля утверждения, should
и assert
. Вы можете прочитать больше о различиях и вариантах использования этих стилей в Руководстве по стилям утверждения Chai.
Запустить тест
Используйте команду npm test для запуска этих тестов. Mocha выводит результаты тестов и показывает их в командной строке.
Неудачный тестовый пример
Предположим, что мы ошиблись при написании функции isNumValid
. Мы забыли добавить условие равенства с операторами больше (›) и меньше (‹).
Когда мы снова запускаем тесты, один тестовый пример не выполняется из-за этой ошибки.
Благодаря модульному тестированию мы можем легко обнаруживать и исправлять подобные ошибки, не тратя часы на поиск ошибки.
Однако в приведенном выше сценарии только один тестовый пример не удался, хотя мы совершили ту же ошибку с обоими логическими операторами. Это проблема. Но разве это недостаток модульного тестирования?
Нет, в наших тестовых примерах это недостаток. Мы не рассмотрели все сценарии ввода и написали отдельные тестовые примеры для каждого из них. Мы объединили граничные условия (когда число от десяти до 70) с другими невыполненными тестовыми условиями вместо написания отдельного тестового примера для каждого условия.
Следовательно, при соблюдении надлежащей практики модульного тестирования наш набор тестов должен содержать всего пять тестовых случаев.
Заключение
В этой статье мы быстро и упрощенно познакомились с тестированием, модульным тестированием и тестированием в Node.js. Однако это руководство содержало только базовые концепции, связанные с тестированием. В следующей статье мы углубимся в тему тестирования в Node.js. Мы обсудим написание сложных тестовых примеров, интеграционное тестирование и другие методы тестирования, такие как использование моков и заглушек.
Спасибо за прочтение!