Coffeescript + Unit-тестирование: глобальные переменные? - PullRequest
8 голосов
/ 05 апреля 2011

Я пытаюсь использовать Jasmine для модульного тестирования для небольшого приложения, написанного на coffeescript.Я обнаружил много источников, которые говорят, что модульное тестирование может быть выполнено на JS, скомпилированном из coffeescript.Как получить доступ к данным и логике кода JS, если все обернуто в анонимную функцию, чтобы избежать загрязнения пространства имен?Это единственное решение для запуска компилятора с флагом -b каждый раз?

Ответы [ 3 ]

9 голосов
/ 05 апреля 2011

Вы должны проверить открытый интерфейс, который вы выставляете из вашего модуля CoffeeScript.Если ваш модуль называется Foo и предоставляет два открытых метода, bar и baz, вы можете экспортировать их следующим образом:

Foo =
    bar: (a, b) ->
        #implementation
    baz: (c) ->
        #implementation
(exports ? this).Foo = Foo

Конечно, есть и другие варианты этого шаблона.См., Например, underscore.coffee .Теперь, когда ваш публичный интерфейс открыт, просто сделайте его доступным для ваших тестов Jasmine любым удобным для вас способом.Например, если вы используете jasmine-node, вы должны сделать следующее:

Foo = require('foo') #assuming your module is compiled to foo.js

Тогда ваши тесты вызовут Foo.bar и Foo.baz.

3 голосов
/ 08 мая 2011

Я только что наткнулся на это, но если вы хотите начать с Jasmine + CoffeeScript по дешевке, вы можете проверить это скелетное приложение Sinatra, которое я разместил на Github.Он использует фильтр стойки для динамической компиляции CoffeeScript.Пример спецификации и инструкции включены: https://github.com/searls/jasmine-coffee

3 голосов
/ 05 апреля 2011

Очень мало случаев, когда имеет смысл использовать -b; обычное тестирование не входит в их число. Lawnsea совершенно правильно, что вы должны экспортировать все, что вы тестируете (присоединяя его к exports в Node или window в браузере). Это так же, как и любой другой язык программирования.

Для Jasmine и CoffeeScript, особенно в сочетании с jQuery, вы должны взглянуть на проект InstantJasmineCoffee и этот связанный пост в блоге .

...