Тестирование ExtJS проектов

Статья: Плагин autotest-plugin для VSCode

Тестирование NodeJS проекта отличается от ExtJS

  • применяется siesta вместо nodeunit
  • добавлена возможность проверки класса
  • есть возможность тестирования в браузере

Для тестирования ExtJS применяется проект siesta. Он позволяет производить тестирование в браузере компоненты ExtJS’a

Создание тестов для ExtJS

Для создания тестов применяется тот же механизм что и в nodejs — применяется атрибут @unittest. Но в отличии от nodejs добавлена возможность тестирования всего класса.

/**
 * Тестовая панель
 * @class ARM.PanelStatic
 * @unittest
 * {
 *      "title": "Hello",
 *      "renderTo": Ext.getBody()
 * }
 */
Ext.define('ARM.PanelStatic', {
    extend: 'Ext.panel.Panel',

    config: {
        title: ''
    },
...

В примере указывается, как можно протестировать класс.

Внимание!!! Применение атрибута @unittest в комментариях класса обязательно.

Передавать параметры в атрибут @unittest не обязательно, все зависит от реализации класса.

Параметр «renderTo» указывается специально для механизма тестирования.

Тестирование может производиться так же для:

  • статических метод
  • singleton классов

Принцип работы

/**
 * Тестовая панель
 * @class ARM.PanelStatic
 * @unittest
 * {
 *      "title": "Hello",
 *      "renderTo": Ext.getBody()
 * }
 */
Ext.define('ARM.PanelStatic', {
    extend: 'Ext.panel.Panel',

    config: {
        title: ''
    },
...

При открытии файла ExtJS плагин проверит наличия папки siesta в корневом каталоге, если указанная папка будет отсутствовать, то будет автоматически сгенерирован проект для тестирования.

Папка ~/siesta/units является каталогом по умолчанию для хранения файлов для тестирования.

После генерации каталога будет автоматически поднят веб сайт для просмотра сайта в браузере, об этом будет свидетельствовать значок и файл server.js в корневом каталоге.

При нажатии на который будет открыт браузер с тестированием.

Внимание!!! Для работы тестирования требуется установка phantomjs

Пример кода для тестирования:

/**
 * Утилиты
 */
StartTest(function (t) {
    t.name = 'ARM.util.Utilits';
    t.description = 'Утилиты';
    t.diag('ARM.util.Utilits - Утилиты');

    var cmp = null;

    t.chain(
        // проверка экземпляра класса
        function (next) {
            Ext.require('ARM.util.Utilits', function () {
                if (!ARM.util.Utilits.singleton)
                    cmp = Ext.create('ARM.util.Utilits', {});
                else
                    cmp = ARM.util.Utilits;

                t.ok(cmp, 'class=[ARM.util.Utilits]');
                next();


            });
        },
        // проверка функций
        function (next) {
            t.ok(cmp.getSum(2, 1) == 3, 'method=[getSum]');
            next();
        },
        function (next) {
            cmp.getAsyncRead(function (txt) {
                t.ok(txt == 'World', "method=[getAsyncRead]");
                next();
            });
        },
        function (next) {
            cmp.getAsyncEmpty(function () {
                t.ok(true, "method=[getAsyncEmpty]");
                next();
            });
        },
        function () {
            cmp.destroy();
            t.done();
        }
    );
});

Правило создания тестов:

  • сопоставление теста с файлом происходит при помощи описания.
    // пример описания класса
    t.ok(cmp, 'class=[ARM.util.Utilits]');
    // пример описания метода
    t.ok(cmp.getSum(2, 1) == 3, 'method=[getSum]');
    
  • тестирование для объектов в которых присутствует параметр renderTo происходит после события afterrender
    cmp = Ext.create('ARM.PanelStatic', Ext.apply({
        "title": "Hello",
        "renderTo": Ext.getBody()
    }, {
        listeners: {
            afterrender: function (sender) {
                t.ok(sender, 'class=[ARM.PanelStatic]');
                cmp = sender;
                next();
            }
        }
    }));
    

Создание собственных файлов тестирования производится по тем же правила, что и nodejs

Автоматическая настройка siesta

Для корректной настройки тестирования нужно в app.json или package.json указывать:

"namespace": "IServ"

Приоритет отдается файлу app.json. Без указания данного свойства настройку файла preload.js нужно произвести вручную.

Print Friendly, PDF & Email

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