Рассмотрим методику тестирования, которая входит в BDD — Behavior Driven Development.
Разберем основной синтаксис фреймворка mocha и chai на примере:
1 2 3 4 5 |
describe("название", function() { it("описание", function() { assert.equal(testFunctionName(2, 4), 8); }); }); |
describe — группирует тесты, в качестве параметров указываем название группы тестирования и функцию, в которой заданы блоки it для тестирования.
it — создает тест, в качестве параметра указываем описание того что конкретно тестируем и функцию в которой будет произведен непосредственно тест.
assert.equal(val1, val2) — функция которая выполняет тест, она проверяет равно ли значение val1(результат работы тестируемой функции) значению val2. assert.equal — не единственная функция для тестирования, остальные будут рассмотрены ниже.
testFunctionName(2, 4) — тестируемая функция в которую(для примера) передаем 2 параметра (2 и 4). При правильной ее работе, она должна вернуть 8.
В примерах для тестирования будет использовать следующие библиотеки:
- Mocha — эта библиотека содержит общие функции для тестирования, включая describe и it.
- Chai — библиотека поддерживает разнообразные функции для проверок.Например: assert.equal
Перейдем сразу к делу и разберем рабочий пример:
HTML страница index.html
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 33 34 35 36 37 38 39 40 |
<!DOCTYPE html> <html> <head> <meta charset="utf‐8"> <!‐‐ подключаем стили Mocha, для отображения результатов ‐‐> <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/mocha/2.1.0/mocha.css"> <!‐‐ подключаем библиотеку Mocha ‐‐> <script src="https://cdnjs.cloudflare.com/ajax/libs/mocha/2.1.0/mocha.js"></script <!‐‐ настраиваем Mocha: предстоит BDD‐тестирование ‐‐> <script> mocha.setup('bdd'); </script> <!‐‐ подключаем chai ‐‐> <script src="https://cdnjs.cloudflare.com/ajax/libs/chai/2.0.0/chai.js"></script> <!‐‐ в chai есть много всего, выносим assert в глобальную область ‐‐> <script> var assert = chai.assert; </script> </head> <body> <script> function <strong>testFunctionName</strong>(x, n) { /* код функции, пока что пусто */ } </script> <!‐‐ в этом скрипте находятся спеки ‐‐> <script src="test.js"></script> <!‐‐ в элементе с id="mocha" будут результаты тестов ‐‐> <div id="mocha"></div> <!‐‐ запустить тесты! ‐‐> <script> mocha.run(); </script> </body> </html> |
JS файл 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 |
// пример сгруппированного describe describe("Умножение", function () { // простой тест describe("Простой пример тестирования:", function () { it("Умножаем 2 на 4", function () { assert.equal(testFunctionName(2, 4), 8); }); it("Умножаем 2 на 5", function () { assert.equal(testFunctionName(2, 5), 10); }); }); // тест с использованием функкций и переменных describe('Пример тестирования с функцией и циклом:', function () { function test_multiplikation(a, b) { var result = a * b; it('Умножаем ' + a + ' на ' + b + ', результат = ' + result, function () { assert.equal(testFunctionName(a, b), result); }); } for (var i = 1; i <= 9; i++) { test_multiplikation(2, i); } }); }); |
Создайте данные файлы у себя локально и поэкспериментируйте.
Дополнительные возможности mocha
Кроме простого создания тестов, нам возможно понадобиться произведение каких либо действия в различное время прохождения теста. Для этого есть специальные функции:
before/after — выполняются до/после запуска тестов.
beforeEach/afterEach — выполняются до/после каждого it.
Пример использования:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 |
describe("Тест", function () { before(function () { alert("Начало тестов"); }); after(function () { alert("Конец тестов"); }); beforeEach(function () { alert("Вход в тест"); }); afterEach(function () { alert("Выход из теста"); }); it('тест 1', function () { alert('1'); }); it('тест 2', function () { alert('2'); }); }); |
Результат выполнения:
1 2 3 4 5 6 7 8 |
Начало тестов Вход в тест 1 Выход из теста Вход в тест 2 Выход из теста Конец тестов |
Дополнительные функции проверки в Chai
- assert(value) – проверяет что value является true в логическом контексте(например: assert(isNaN(testFunctionName(2, 4))).
- assert.equal(value1, value2) – проверяет равенство value1 == value2.
- assert.strictEqual(value1, value2) – проверяет строгое равенство value1 === value2.
- assert.notEqual, assert.notStrictEqual – проверки, обратные двум предыдущим.
- assert.isTrue(value) – проверяет, что value === true
- assert.isFalse(value) – проверяет, что value === false
- …более полный список – в документации
Источник: https://learn.javascript.ru/testing
Будь первым кто прокомментирует статью.