JavaScript: Автоматические тесты при помощи chai и mocha (спецификация)

JavaScriptКомментариев нет

Рассмотрим методику тестирования, которая входит в BDD — Behavior Driven Development.

Разберем основной синтаксис фреймворка mocha и chai на примере:

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

<!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 testFunctionName(x, n) {
  /* код функции, пока что пусто */
}
</script>

<!‐‐ в этом скрипте находятся спеки ‐‐>
<script src="test.js"></script>

<!‐‐ в элементе с id="mocha" будут результаты тестов ‐‐>
<div id="mocha"></div>

<!‐‐ запустить тесты! ‐‐>
<script>
  mocha.run();
</script>
</body>
</html>

JS файл test.js

// пример сгруппированного 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.

Пример использования:

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
Выход из теста
Конец тестов

Дополнительные функции проверки в 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


Будь первым кто прокомментирует статью.

Добавить комментарий

Войти с помощью: