← к списку статей

21.12.11

Тестирование с помощью QUnit

Как разбить тесты на группы (модули) и выполнять их по отдельности, используя заданную задержку.

QUnit, безусловно, хорошая библиотека для тестирования яваскрипта. И многие пишут о том, как ее использовать. Я тоже решил написать, потому моя проблема оказалась уникальной, ни один из источников не помог мне ее решить, так что пришлось выпутываться самостоятельно. Спешу поделиться опытом.

Проблема

Представим ситуацию: тестов много, они разбиты на группы (модули), каждой группе необходимы свои условия для работы. Проблема заключалась в том, чтобы после выполнения группы тестов

  • остановить тестирование,
  • выполнить условия для следующей группы и затем
  • продолжить выполнение тестов.

Если писать код по шаблону исходной документации, то тесты выполнятся все сразу, задержки вы не добьетесь и не сможете каждую группу выполнить со своими условиями.

Решение

  1. Объявляем все тесты одновременно, разбив их на модули. В названии каждого модуля помещаем некий уникальный ключ. (Ниже станет понятно, для чего это нужно.)
  2. Если для выполнения теста необходимо какое-то условие, то помещаем его внутрь теста и уже внутри условия объявляем expect().
  3. Добавляем обработчик QUnit.moduleDone. Его задача — следить за окончанием выполнения модуля, устанавливать ему флаг завершения и временно прекращать выполнение тестов.
  4. Устанавливаем QUnit.config.reorder значение false, запрещая тем самы запуск тестов в произвольном порядке. (Этот флаг, к сожалению, нигде не задокументирован, и я наткнулся на него случайно. Именно это и подтолкнуло меня к написанию статьи.)
  5. Создаем функционал, который по окончании тестов очередной группы, создает условия для выполнения тестов следующей группы и возобновляет процесс тестирования.

Надеюсь, использование незадокументированных возможностей не приведет к проблемам в будущем. 

← к списку статей