Юнит-тестирование

Юнит-тестирование является важным этапом разработки приложения. Чем больший процент кода вашего интерфейсного модуля покрыт тестами, тем безопаснее потом будет вносить в этот код изменения.

Wasaby предоставляет возможность покрывать код интерфейсных модулей юнит-тестами, которые могут запускаться как в окружении Node.js, так и в браузере.

Используемые инструменты:

Принципы организации

  1. Для хранения юнит-тестов интерфейсного модуля нужно создать отдельный интерфейсный модуль (папка содержащая одноимённый файл c расширением .s3mod). Обязательно заполнить список его зависимостей, как минимум там должен быть указан тестируемый модуль, и добавить тег <unit_test/>. Имя модуля задается в виде <ИмяТестируемогоМодуля>Unit, например для модуля Controls модуль с тестами должен называться ControlsUnit.

Пример s3mod файла для модуля с юнит тестами:

<?xml version="1.0" encoding="UTF-8" ?>
<ui_module id="1234" name="<ИмяТестируемогоМодуля>Unit" responsible="Иванов И.И." version="1.00">
   <description/>
   <depends>
      <module id="0000" name="<ИмяТестируемогоМодуля>"/>
   </depends>
   <load_after/>
   <unit_test/>
   <parameters/>
   <resources/>
   <preload/>
</ui_module>
  1. Пакеты тестов должны иметь имена файлов, заканчивающиеся на .test.ts. Для каждого тестируемого файла (модуля) нужно создать одноименный пакет тестов.
  2. При тестировании класса каждое свойство или метод тестируются внутри отдельного scope, заданного через вложенный вызов describe().

Примеры кода

Для тестирования класса Types/_entity/CancelablePromise нужно создать пакет тестов TypesUnit/_entity/CancelablePromise.test.ts со следующим содержанием:

import {assert} from 'chai';
import CancelablePromise from 'Types/_entity/CancelablePromise';
 
describe('Types/_entity/CancelablePromise', () => {
    describe('.promise', () => {
        it('should return instance of original Promise', () => {
            const origin = new Promise((resolve) => resolve());
            const instance = new CancelablePromise(origin);
            assert.strictEqual(instance.promise, origin);
        });
    });

    // Дальше тестируем другие свойства и методы класса CancelablePromise
});

Для подключения библиотеки Sinon используйте следующий import:

import * as sinon from 'sinon';
 
// ...

Запуск тестов

О том, как запускать тесты, читайте соответствующий раздел статьи про wasaby-cli.

Интеграция с WebStorm

Помимо запуска тестов с командной строки можно интегрировать их в интерфейс IDE Storm, а также запускать тесты по одному прямо из редактора.

Инструкция по интеграции:

  1. Открыть Run/Debug Configurations, развернуть в левом меню templates и выбирать там Mocha.
  2. Заполнить пункты:

    • Working directory: корень репозитория
    • Mocha package: node_modules/mocha
    • User interface: bdd
    • Extra Mocha options: node_modules/wasaby-cli/tools/prepareTestEnv.js

    3. Добавить конфигурацию Mocha, и выбрать Test directory: application/ControlsUnit 4. Нажать кнопку запуска: 5. Для того, чтобы запустить только один тест, надо нажать на зеленую точку около его описания: