JavaScript тестирование с Mocha

Mocha (Мока) — многофункциональная среда JavaScript-тестирования, работающая на Node.js и в браузере, что делает асинхронное тестирование простым и интересным. Тесты Mocha запускаются серийно, что позволяет гибко и точно создавать отчеты.

При первом знакомстве Mocha может показаться сложным фреймворком, но на самом деле работа с ним легка и приносит удовольствие.

Установка Mocha через терминал

Для установки выполните команду:

$ npm install -g mocha

Если вы устанавливаете npm модуль глобально, вы не ограничиваете его использование в рамках одного проекта. В место этого вы имеете доступ к фреймворку с любого каталога и проекта.

Как только Mocha будет установлен глобально вы сможете запускать команды в терминале используя ключевое слово mocha.

Что бы проверить установку используйте команду $ mocha --version

Создание проекта

Далее мы создадим папку для проекта с именем test. В папке test мы создадим файл с именем test.js. Находясь в директории в терминале запустим команду $ npm init для инициализации проекта.

Команда $ npm init — самый простой и короткий способ создания файла package.json. Теперь мы можем запускать Mocha выполнив в терминале команду $ npm test.

У вас должна получится такая структура файлов.

В package.json должен быть следующий код.

Если вы выполнили все верно и получили такой же результат, то можно приступать к тестированию.

Написание первого теста

Мы скопируем пример теста из документации mocha, я дальше поясню что происходит в коде. А пока скопируйте код ниже в файл test.js.

Теперь запустите ваш тест в терминале выполнив команду $ npm test. Вы должны получить сообщение:

Это сообщение означает что тест пройден, это конечно хорошо но мы и понятия не имеем как работает этот код. Поэтому давайте пройдемся по основным моментам.

Можно запускать Mocha единожды, и в режиме постоянного тестирования при каждом изменении файлов. Для второго варианта нужно указать параметр watch: $ mocha --watch

Когда вы пишите тест вам необходимо знать о двух базовых функциях: describe() и it(). Мы их используем в примере выше.

describe(a,b) — это самый простой способ сгруппировать тесты в Mocha. Мы можем объединять тесты в различные группы исходя из желаний. Функция принимает два аргумента:

a — имя тестовой группы

b — функция обратного вызова

В нашем примере выше есть группа тестов Array, которая содержит тестовую группу #indexOf(), которая в свою очередь является контейнером для теста.

It(a,b) — служит для индивидуальных тест кейсов и так же принимает два аргумента.

a — строка, которая содержит объяснение того, что тест должен делать.
b — функция обратного вызова, которая содержит сам тест.

Вместе с Mocha можно использовать Assert библиотеки. Этот инструмент используется для проверки разного вида вещей на корректность — это то что определенно определяет результат.

Использование Assert библиотек не есть необходимостью, но они делают тестирование намного проще. Mocha позволяет нам использовать любые библиотеки. В примере ниже (и во всех других примерах) мы используем модули Node.js.

Это строка кода которая подключает библиотеку.

Существует определенное количество тестов включенных в assert.

Assert библиотеки

Mocha позволяет выбирать стили/библиотеки.

  • should.js BDD style
  • expect.js
  • chai expect(), assert() and should style assertions
  • better-assert

Одна из них — assert.equal(actual, expected); она проверяет равенство между нашим явным и ожидаемым параметрами, используя двойное равно ==.

Вспомните наш пример:

Все что мы сделали — это проверили равняется ли -1 этот элемент массива [1,2,3].indexOf(4). Если наш ожидаемый параметр равен явному, то тест пройден.

Далее снова запускаем наш тест с терминала командой $ npm test.

Давайте разберем сообщение построчно.

  • Первая тестовая группа Array
  • Базовая тестовая группа indexOf()
  • Линия, которая указывает на пройденный тест и содержит его описание
  • Итог, что указывает на наличие 1 пройденного теста и время за которое он был пройден в миллисекундах

Объяснение

Мы уже имеем все части пазла, давайте попробуем собрать их вместе. Здесь приведен код оригенального теста, с комментариями чтобы объяснить каждую строку.

Проверка знаний

Пришло время закрепить все что вы узнали. Попробуйте выполнить следующие задания не подсматривая:

  • Создайте группу тестов и дайте ей имя, к примеру Math
  • Создайте еще два теста в вашей группе.
  • Первый тест должен проверить если ли равенство в выражении 33 = 9
  • Второй тест должен проверить равенство (3-4)8 = -8

Ответ

Если у вас не получилось написать собственный тест, то это нормально.

Давайте, посмотрим на решение:

После запуска $ npm test в терминале мы получаем:

Запуск в браузере

Mocha можно запустить и в браузере, для этого необходимо подключить скрипт и указать какой интерфейс вы хотите использовать и потом запустить тесты:

Генераторы отчетов

Генерируют отчеты в разных вариантах, а так же генерируют документацию к тестам:

  • Dot Matrix – стандартный
  • Spec
  • Nyan
  • TAP
  • Landing Strip
  • List
  • Progress
  • JSON
  • JSON Stream
  • JSONCov
  • HTMLCov
  • Min
  • Doc
  • XUnit
  • TeamCity
  • Markdown
  • HTML

Что бы выбрать вариант теста, используйте параметр reporter

comments powered by HyperComments