Как раскрыть объекты javascript для модульного тестирования, не загрязняя глобальное пространство имен

У меня есть javascript плагин автозаполнения, который использует следующие классы (написанные на coffeescript): Query, Suggestion, SuggestionCollection и Autocomplete. Каждый из этих классов имеет соответствующую спецификацию, написанную в Jasmine.

Плагин определен внутри модуля, например:

(function(){
  // plugin...
}).call(this);

Это предотвращает загрязнение классами глобального пространства имен, но также скрывает их от любых тестов (спецификаций с помощью jasmine или юнит-тестов с помощью чего-то вроде q-unit).

Какой лучший способ предоставить классы или объекты javascript для тестирования без загрязнения глобального пространства имен?

Я отвечу решением, которое придумал, но я надеюсь, что есть что-то более стандартное.

Update: My Attempted Solution

Поскольку я новичок с < 100 xp, я не могу ответить на свой собственный вопрос в течение 8 часов. Вместо того, чтобы ждать, я просто добавлю то, что я сделал здесь.

Чтобы специфицировать эти классы, я придумал глобальный объект под названием _test, внутри которого я раскрыл все классы для тестирования. Например, в coffeescript:

class Query
  // ...

class Suggestion
  // ...

// Use the classes

// Expose the classes for testing
window._test = {
  Query: Query
  Suggestion: Suggestion
}

Внутри моих спецификаций я могу раскрыть класс, который я тестирую:

Query = window._test.Query

describe 'Query', ->
  // ...

Это имеет то преимущество, что загрязняется только объект _test, и маловероятно, что он столкнется с другим определением этого объекта. Однако это все еще не так чисто, как хотелось бы. Я надеюсь, что кто-нибудь предложит лучшее решение.

7
задан Mitch 20 December 2011 в 01:27
поделиться