• 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


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

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

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