Как эффективно использовать Jasmine для тестирования ресурсов Javascript, упакованных с помощью Jammit? - PullRequest
7 голосов
/ 29 апреля 2011

У меня есть приложение rails, которое комбинирует ресурсы javascript с использованием Jammit , и я хотел бы использовать Jasmine для тестирования моего javascript в стиле BDD. Мне интересно, есть ли у кого-нибудь совет по получению доступа к сгенерированным Jammit 'pacakges' изнутри Жасмин?

Проблема в том, что Jasmine настраивается путем определения списка файлов JS на диске для тестирования, а затем включает эти файлы в свою собственную страницу запуска тестов, которая загружается и запускается в браузере.

Я мог бы сослаться на каждый из отдельных файлов JS внутри файла конфигурации jasmine.yml до того, как они будут упакованы с Jammit ... однако Jammit уже имеет дело с зависимостями между файлами для меня, и, что более важно, я также нужен доступ к скомпилированным шаблонам javascript , которые создает Jammit.

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

Мне интересно, смогу ли я как-нибудь:

  • Смонтировать контроллер Jammit из стоечного сервера Jasmine, чтобы он мог обслуживать пакеты от Jasmine? Это в основном будет работать так же, как Jammit уже из среды разработки Rails.
  • Как-нибудь подключиться к Jasmine, чтобы упаковать ресурсы при каждой загрузке страницы перед выполнением тестов? Это будет медленнее, но сэкономит мне шаг и обеспечит актуальность.

Есть предложения? Я только начинаю с этим, так что я могу ошибаться. Любой совет будет принята с благодарностью. :-)

Спасибо! -Джон

Ответы [ 2 ]

10 голосов
/ 20 мая 2011

Вот волшебная комбинация, которую вы ищете:

  1. Используйте охранный камень вместе с guard-jammit gem , чтобы отслеживать изменения в активах вашего проекта
  2. Установите плагин LiveReload в браузере по вашему выбору и установите guard-livereload gem , чтобы ваш браузер мог автоматически перезагружаться при изменении ваших характеристик или ресурсов.
  3. Включите охрану, затем наберите «Жасмин», затем загрузите свои характеристики жасмина в браузере, затем нажмите кнопку «живой перезагрузки», чтобы подключиться к серверу «живой перезагрузки», запущенному охраной
  4. Измените ваши файлы. Наблюдайте, как волшебство происходит, когда охранник запускает jammit и инструктирует ваш браузер обновить спецификации жасмина.

Вот пример Guardfile для начала работы:

guard 'jammit' do
  watch(%r{public/javascripts/(.*)\.js})
  watch(%r{app/views/jst/(.*)\.jst})
  watch(%r{public/stylesheets/(.*)\.css})
end

guard 'livereload', :apply_js_live => false do
  watch(%r{app/.+\.(erb|haml)})
  watch(%r{app/helpers/.+\.rb})
  watch(%r{public/.+\.(css|js|html)})
  watch(%r{config/locales/.+\.yml})
  watch(%r{spec/javascripts/.+\.js})
end
3 голосов
/ 20 мая 2011

Я пришел к правильному решению: принудительно перезагрузить Jammit и упаковать его при запуске jasmine.Для этого вам нужно отредактировать файл jasmine_config.rb:

require 'jammit'
module Jasmine
  class Config

    Jammit.reload!
    Jammit.package!

   end
end

Я написал более подробный пост об этом здесь: http://www.rebeccamiller -webster.com / 2011/05 / jammit-jasmine-BDD /

...