У меня есть 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
, и маловероятно, что он столкнется с другим определением этого объекта. Однако это все еще не так чисто, как хотелось бы. Я надеюсь, что кто-нибудь предложит лучшее решение.