Не удается найти шаблоны haml-js во время пробного запуска Jasmine - PullRequest
0 голосов
/ 03 декабря 2011

Я пытаюсь протестировать некоторые представления backbone.js, используя Jasmine (через jasmine-headless-webkit).Все работает хорошо, за исключением того, что мои шаблоны haml-js недоступны при тестировании.

Следующий код, на мой взгляд, работает нормально:

render: =>
  html = JST['views/avia_view_template']()
  $(@el).html(html)

.... но когда он запускается как часть спецификации Jasmine, я получаю следующую ошибку:

ReferenceError: Can't find variable: JST in /home/duncan/avia/app/assets/javascripts/views/avia_view.js.coffee

Я подозреваю, что я что-то не так делаю в jasmine.yml.Я явно включил файл шаблона, он все еще не работает:

src_files:
  - "vendor/**/*.{js,coffee}"
  - "lib/**/*.{js,coffee}"
  - app/assets/javascripts/application.js
  - app/assets/javascripts/avia.js
  - app/assets/javascripts/jquery-1.6.4.js
  - app/assets/javascripts/underscore.js
  - app/assets/javascripts/backbone.js
  - app/assets/javascripts/jquery.jqGrid.min.js
  - app/assets/javascripts/views/avia_view_template.jst.hamljs
  - app/assets/javascripts/views/avia_view.js.coffee

Возможно, я просто выбрал неправильный подход ... должен ли я использовать Jasmine, чтобы заглушить и высмеятьзвонки в JST и JQuery?Строгое модульное тестирование говорит, что я должен, и в этом случае отсутствие доступа к шаблону не является проблемой.

Буду весьма признателен за любые советы - либо о моем подходе к тестированию, либо о конкретном сбое JST..

1 Ответ

2 голосов
/ 05 декабря 2011

Нет необходимости заглушки, вам просто нужно правильно настроить пути к активам. Чтобы воспользоваться преимуществами интеграции Sprockets в 0.8.0 и более поздних версиях, лучший способ настроить файл jasmine.yml будет выглядеть так:

src_dir: app/assets/javascripts
asset_paths:
- lib/assets/javascripts
src_files:
- "**/*"

Это настроит Sprockets для поиска в app/assets/javascripts и lib/assets/javascripts и скажет jasmine-headless-webkit вытянуть все возможные файлы в обоих каталогах. Обычный файл, который требует Жасмин, в этом случае не будет использоваться, только звездочки.

Затем настройте свои require операторы, как обычно в файлах JS. Итак, в application.js.coffee:

#= require jquery-1.6.4
#= require avia
#= require underscore
#= require backbone
#= require jquery.jqGrid.min
#= require_tree .

alert "Look, Internet codes!"

А в avia_view.js.coffee:

#= require views/avia_view_template.jst.hamljs

class window.AviaView extends Backbone.View
  template: JST['views/avia_view_template']
  ... code ...

Конечно, эти .hamljs шаблоны не будут загружены, если не загружен процессор Haml с поддержкой Sprockets. Итак, вы хотели бы иметь Gemfile, в котором есть по крайней мере это:

gem 'jasmine-headless-webkit'
gem 'haml-sprockets'
# also bring in backbone and jquery
gem 'jquery-rails'
gem 'backbone-rails'

Тогда, если ваше приложение само знает, что делать, когда загружаются эти продаваемые гемы JS, вы можете избавиться от собственных копий jQuery и Backbone, и у вас также будут доступны шаблоны .hamljs. В этот момент вы должны запустить с помощью Bundler:

bundle exec jasmine-headless-webkit

И последнее, лучший способ убедиться, что все загружается, - это использовать опцию списка:

bundle exec jasmine-headless-webkit -l

Это будет запускать все через загрузчики файлов JHW и Sprockets и распечатывать порядок файлов, которые будут включены. Это поможет диагностировать проблемы require, так как вам всегда приходится иметь дело как с загрузкой в ​​стиле Jasmine, так и в стиле Sprockets в одном сценарии. Настройка полностью загружаемых файлов src через Sprockets значительно упрощает процесс, поэтому я бы порекомендовал такую ​​настройку.

...