Настройте свои тесты и приступайте

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. Мы обсудим написание сложных тестовых примеров, интеграционное тестирование и другие методы тестирования, такие как использование моков и заглушек.

Спасибо за прочтение!