Как выполнить модульное тестирование непосредственных функций JavaScript с помощью Jasmine / Chutzpah / JsTestDriver - PullRequest
1 голос
/ 27 марта 2012

У нас есть непосредственная функция в файле mediator.js, которая добавляет объект-посредник в глобальное пространство имен. Этот «посредник» - единственный глобальный объект, который у нас есть.

Теперь у нас есть много различных юнит-тестов для объекта «посредник». И мы хотим, чтобы каждый тест выполнялся изолированно - иными словами, каждый тест должен начинаться с вызова немедленной функции для создания нового чистого объекта-посредника.

Тесты написаны на Жасмине, и мы запускаем их как с Chutzpah, так и с JsTestDriver.

Так как я могу это сделать?

  • В Chutzpah я мог бы поместить каждый отдельный тест в свой собственный файл js и ссылаться на mediator.js в каждом файле теста
  • С JsTestDriver мне может понадобиться файл конфигурации для каждого теста, который включает mediator.js и файл теста

Мы также рассматриваем возможность отказа от непосредственного шаблона и имеем функцию конструктора для создания объекта-посредника. Это было бы позором, потому что в рабочем коде нам нужно создать медиатор только один раз, и мы не хотим, чтобы функция конструктора зависала, загрязняя глобальное пространство имен.

Конечно, другие люди сталкивались с этой проблемой при тестировании непосредственных / самозаверяющих / самозаполняющихся функций´. Так что же такое «лучшая практика»?

1 Ответ

2 голосов
/ 28 марта 2012

Я думаю, что наилучшим вариантом может быть предоставление конструктора-посредника и переопределение каждого теста существующего глобального члена. Раскрытие одного конструктора объекта было бы большой проблемой. Похоже, что обходные пути требуют гораздо больше усилий, чем просто метод.

Что-то вроде:

// mediator.js

function createMediator(){ ... }

window.mediator = createMediator();



// In unit test

beforeEach(function () {
  window.mediator = createMediator();
});
...