Mocha — это один из самых популярных фреймворков для тестирования
JavaScript-кода. Он предоставляет мощные возможности для тестирования,
включая различные ассерты для проверки корректности работы программного
обеспечения. В Node.js стандартной библиотекой для выполнения ассертов
является модуль assert. Этот модуль предоставляет набор
функций для тестирования условий, которые должны быть истинными в рамках
выполнения кода. Использование assert в сочетании с Mocha
позволяет легко проверять логику программ и автоматически проверять их
корректность.
Модуль assert является встроенным модулем Node.js и
предоставляет методы для выполнения утверждений. Утверждения (ассерты) —
это проверки, которые утверждают, что некоторое условие является
истинным. Если условие ложно, выбрасывается ошибка, которая прерывает
выполнение теста. Если условие истинно, тест продолжается.
const assert = require('assert');
assert.strictEqual(2 + 2, 4); // Утверждение пройдет
assert.strictEqual(2 + 2, 5); // Бросит ошибку, тест не пройдет
assert.strictEqual(actual, expected, [message]) Проверяет, что два значения строго равны. Это означает, что они должны быть одинаковыми по типу и значению. Если значения не равны, выбрасывается ошибка.
Пример:
assert.strictEqual(2 + 2, 4); // Утверждение проходит
assert.strictEqual('2' + '2', '22'); // Утверждение проходит
assert.strictEqual(2 + 2, '4'); // Бросит ошибку, т.к. типы разных значений различныassert.deepEqual(actual, expected, [message]) Сравнивает два объекта или массива на глубокое равенство. Это значит, что сравниваются их свойства или элементы, а не ссылки на них. При этом порядок свойств или элементов имеет значение.
Пример:
assert.deepEqual({ a: 1, b: 2 }, { a: 1, b: 2 }); // Утверждение проходит
assert.deepEqual([1, 2], [1, 2]); // Утверждение проходитassert.notStrictEqual(actual, expected, [message]) Проверяет, что два значения не равны строго. Если они равны, выбрасывается ошибка.
Пример:
assert.notStrictEqual(2 + 2, 5); // Утверждение проходит
assert.notStrictEqual(2 + 2, 4); // Бросит ошибку, т.к. значения равныassert.notDeepEqual(actual, expected, [message]) Проверяет, что два объекта или массива не равны на уровне глубокого сравнения.
Пример:
assert.notDeepEqual({ a: 1 }, { b: 2 }); // Утверждение проходит
assert.notDeepEqual([1, 2], [2, 1]); // Утверждение проходитassert.ok(value, [message]) Проверяет, что
значение является истинным (не является false,
null, undefined, 0,
NaN или пустой строкой). Если значение ложно, выбрасывается
ошибка.
Пример:
assert.ok(42); // Утверждение проходит
assert.ok('string'); // Утверждение проходит
assert.ok(0); // Бросит ошибку, т.к. 0 — ложное значениеassert.fail([message]) Является специальным методом для явного выбрасывания ошибки. Обычно используется в случаях, когда необходимо явно вызвать сбой теста.
Пример:
assert.fail('Тест не прошел'); // Бросит ошибку с сообщениемassert.throws(block, [error], [message]) Проверяет, что выполнение блока кода (функции) вызывает ошибку. Этот метод особенно полезен для тестирования исключений.
Пример:
assert.throws(() => {
throw new Error('Ошибка');
}, /Ошибка/); // Утверждение проходитMocha предоставляет структуру для написания тестов с использованием
различных ассертов, в том числе модуля assert. В тестах
Mocha можно удобно сочетать ассерты с различными функциями, такими как
before, after, beforeEach, и
afterEach, чтобы подготовить тестовую среду и проводить
тестирование кода.
Пример теста с использованием Mocha и assert:
const assert = require('assert');
describe('Математические операции', () => {
it('2 + 2 должно быть равно 4', () => {
assert.strictEqual(2 + 2, 4);
});
it('Деление на ноль должно бросить ошибку', () => {
assert.throws(() => {
let result = 1 / 0;
}, /Infinity/);
});
});
В данном примере:
Mocha поддерживает асинхронные тесты, что особенно важно для
тестирования кода, работающего с промисами или колбэками. В случае
асинхронных тестов важно использовать функцию done или
возвращать промис, чтобы Mocha правильно синхронизировала выполнение
тестов.
Пример асинхронного теста с использованием assert:
const assert = require('assert');
const fs = require('fs');
describe('Чтение файла', () => {
it('файл должен содержать текст', (done) => {
fs.readFile('test.txt', 'utf8', (err, data) => {
if (err) done(err);
assert.ok(data.includes('Hello, world!'));
done();
});
});
});
Здесь:
done, чтобы сообщить Mocha о
завершении асинхронного теста.Использование модуля assert в Mocha делает тестирование
JavaScript-кода удобным и мощным инструментом. Встроенные методы
ассертов позволяют легко проверять различные условия, будь то строгие
сравнения, глубокие сравнения или проверка на ошибки. В комбинации с
Mocha, который организует тесты и их выполнение, assert
становится идеальным инструментом для тестирования логики кода, что
значительно упрощает процесс разработки и обеспечивает высокое качество
программного обеспечения.