Mocha¶
Важное место при разработке на Node.js занимает тестирование. И в данном случае гораздо легче воспользоваться имеющимися фреймворками, которые упрощают процесс тестирования. Одним из таких фреймворков является Mocha. Подробнее о фреймворке можно узнать на официальной странице Mochajs. В данном же случае мы рассмотрим некоторые базовые стороны работы с ним.
Определим в папке проекта новый файл package.json
со следующим содержимым:
1 2 3 4 |
|
Далее добавим в проект пакет mocha
с помощью следующей команды:
1 |
|
Так как фреймворк Mocha необходим только для тестирования приложения, то он добавляется в файле package.json
в секцию devDependencies
с помощью команды --save-dev
.
Для тестирования определим простейший модуль. Для этого добавим в проект файл operations.js
со следующим содержимым:
1 2 3 |
|
Здесь определена функция умножения двух чисел.
Для тестирования этого модуля добавим в проект новый файл operations.test.js
:
1 2 3 4 5 6 7 8 9 10 11 |
|
Рассмотрим этот тест. Для тестирования результата применяется функция it()
, которая предоставляется фреймворком Mocha.
Эта функция принимает два параметра: текстовое описание тестируемого действия, по которому его можно идентифицировать, и саму тестирующую функцию.
К примеру, нам надо проверить работу выше определенной функции multiply()
, которая умножает два числа. Для этого в эту функцию надо передать два числа и сравнить ее результат с ожидаемым. Если результат не совпадает с ожидаемым значением, то генерируется ошибка.
Для упрощения запуска тестов изменим файл package.json
следующим образом:
1 2 3 4 5 6 7 8 9 10 |
|
Здесь добавляется секция "scripts"
, в которой определяется команда "test"
. Эта команда выполняет команду "mocha *.test.js"
, которая запускает тестирование с помощью mocha, передавая фреймворку все файлы, которые оканчиваются на ".test.js"
Если у нас один файл теста, то мы могли бы сразу указать полное имя файла, типа mocha operations.test.js
Далее в командной строке перейдем к папке проекта и выполним команду:
1 |
|
В данном случае консоль указывает, что тест пройден.
Но, если мы изменим код теста:
1 2 3 4 5 6 7 8 9 10 11 |
|
То тест не будет проходить, так как результат - 15
не равен ожидаемому результату - числу 16
. И консоль уведомит об этом при повторном запуске теста:
Подобным образом мы можем определять и другие тесты. Например, изменим файл модуля operations.js
:
1 2 3 4 5 6 |
|
Теперь в файле была добавлена функция для сложения чисел. Протестируем ее в operations.test.js
:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 |
|
Запустим тест:
Тестирование асинхронных функций¶
Немного отличается тестирование асинхронных функций. Например, определим в модуле operations.js
асинхронную функцию:
1 2 3 4 5 6 7 8 9 10 11 12 |
|
Протестируем эту функцию в operations.test.js
:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 |
|
Особенностью тестирования асинхронных функций является то, что чтобы они завершились до завершения теста, в тестирующую функцию передается функция done()
. Причем при окончании тестирования нам надо вызвать эту функцию. Тем самым через подобную функцию Mocha сможет контролировать выполнение теста.
Если мы не передадим функцию done
в тест, тогда тест завершится раньше, чем завершится асинхронная функция.