Для начала необходимо установить сам Mocha. Это можно сделать с помощью npm (Node Package Manager), который является стандартом для работы с зависимостями в Node.js.
Инициализация проекта:
Если проект ещё не инициализирован, для начала нужно создать
package.json файл. Для этого достаточно выполнить
команду:
npm init -y
Она создаст минимальный package.json, который будет
необходим для работы с зависимостями.
Установка Mocha:
Для установки Mocha в проект следует выполнить следующую команду:
npm install mocha --save-dev
Параметр --save-dev добавляет Mocha в секцию
devDependencies в package.json, что
означает, что Mocha будет использоваться только в процессе разработки, а
не на продакшн-сервере.
Проверка установки:
После установки можно проверить, что Mocha установлен правильно, запустив команду:
./node_modules/.bin/mocha --version
Это вернёт текущую версию Mocha, что подтверждает успешную установку.
Для удобства тестирования рекомендуется организовать проект в следующей структуре:
/project
/node_modules
/test
test.js
package.json
В каталоге test будут храниться все тестовые файлы, что позволяет легко организовать и поддерживать тестирование. Этот каталог не является обязательным, но является хорошей практикой.
Mocha предоставляет множество конфигурационных опций, которые можно задать для каждого теста или для всей тестовой среды в целом. Эти опции могут быть переданы через командную строку или через файл конфигурации.
Конфигурация через командную строку:
Mocha поддерживает различные флаги и параметры, которые можно передавать через командную строку. Например:
spec, dot, nyan).Пример запуска с параметрами:
./node_modules/.bin/mocha --reporter spec --timeout 5000
Это выполнит тесты с использованием репортера spec и
установит таймаут в 5000 миллисекунд (5 секунд) для каждого
теста.
Конфигурация через файл:
Вместо того, чтобы указывать параметры каждый раз в командной строке, можно использовать конфигурационный файл mocha.opts или .mocharc.json. Этот файл должен быть размещён в корневом каталоге проекта, в котором запускаются тесты.
Пример содержимого файла mocha.opts:
--reporter spec
--timeout 5000
Таким образом, каждый раз, когда будет запускаться Mocha, эти параметры будут использоваться автоматически.
После установки и настройки Mocha можно начать запускать тесты. В простейшем случае это делается с помощью следующей команды:
./node_modules/.bin/mocha
По умолчанию Mocha будет искать все файлы, соответствующие паттерну test//*.js**, и выполнять тесты в этих файлах. При этом тесты могут быть организованы в виде отдельных функций или классов.
Пример теста:
const assert = require('assert');
describe('Математические операции', function() {
it('должен складывать два числа', function() {
assert.strictEqual(1 + 1, 2);
});
});
В данном примере используется функция describe, которая
организует тесты в группы, и функция it, которая описывает
конкретный тест. Метод assert.strictEqual проверяет, что
сумма чисел действительно равна 2.
Mocha имеет отличную совместимость с множеством дополнительных библиотек, которые могут помочь в организации тестирования, например:
Для установки этих пакетов можно использовать следующие команды:
npm install chai --save-dev
npm install sinon --save-dev
Пример использования Chai с Mocha:
const chai = require('chai');
const expect = chai.expect;
describe('Проверка чисел', function() {
it('должен проверять, что число больше нуля', function() {
expect(5).to.be.above(0);
});
});
Mocha поддерживает асинхронное тестирование, что позволяет работать с функциями, которые выполняются асинхронно (например, с операциями чтения файлов, запросами к серверу и т.д.).
Чтобы сделать тест асинхронным, необходимо либо использовать callback (передавая функцию в тест), либо возвращать промис или использовать async/await.
Пример с callback:
describe('Асинхронный тест', function() {
it('должен выполнить асинхронную операцию', function(done) {
setTimeout(function() {
assert.strictEqual(2 + 2, 4);
done(); // Вызов done сообщает Mocha, что тест завершён
}, 1000);
});
});
Пример с промисом:
describe('Тест с промисом', function() {
it('должен вернуть результат', function() {
return new Promise(function(resolve, reject) {
setTimeout(function() {
resolve(5 + 5);
}, 1000);
}).then(result => {
assert.strictEqual(result, 10);
});
});
});
Пример с async/await:
describe('Асинхронный тест с async/await', function() {
it('должен вернуть результат', async function() {
const result = await new Promise((resolve) => setTimeout(() => resolve(5 + 5), 1000));
assert.strictEqual(result, 10);
});
});
Mocha — это мощный инструмент для тестирования JavaScript-кода, который позволяет легко организовать тесты, использовать различные репортеры и настраивать выполнение тестов. Он имеет множество возможностей для интеграции с другими инструментами, такими как Chai и Sinon, и поддерживает как синхронные, так и асинхронные тесты.