Статья: Плагин 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 нужно произвести вручную.