Классы, определенные в CoffeeScript, не найдены спецификациями Jasmine - PullRequest
3 голосов
/ 29 ноября 2011

Я создаю приложение backbone.js на сервере Rails 3.1. Я использую CoffeeScript для написания базовых классов и Jasmine (через jasmine-headless-webkit) для тестирования.

Учитывая следующее (частичное) дерево:

.
├── app
│   ├── assets
│   │   ├── javascripts
│   │   │   └── views
│   │   │       ├── avia_view.js.coffee
├── spec
│   ├── javascripts
│   │   └── views
│   │       └── avia_view_spec.js.coffee

... Я бы ожидал, что avia_view_spec.js.coffee узнает о Avia.AviaView, который определен в avia_view.js.coffee.

Однако при запуске bundle exec jasmine-headless-webkit я получаю следующий вывод:

Running Jasmine specs...
F

Avia.AviaView render creates a new MatricesView . (/home/duncan/avia/spec/javascripts/views/avia_view_spec.js.coffee:10)
  ReferenceError: Can't find variable: Avia in /home/duncan/avia/spec/javascripts/views/avia_view_spec.js.coffee (line ~5)
  ReferenceError: Can't find variable: Avia in /home/duncan/avia/spec/javascripts/views/avia_view_spec.js.coffee (line ~10)

My jasmine.yml содержит следующее:

src_files:
  - public/javascripts/prototype.js
  - public/javascripts/effects.js
  - public/javascripts/controls.js
  - public/javascripts/dragdrop.js
  - public/javascripts/application.js
  - public/javascripts/**/*.js

Я думаю Мне нужно сказать Жасмин загрузить содержимое avia_view.js.coffee, но я не совсем уверен, как. Добавление явной ссылки в раздел src_files в jasmine.yml, похоже, не имеет значения ...

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

Ответы [ 2 ]

5 голосов
/ 29 ноября 2011

Не видя большую часть вашего кода, я подозреваю, что он из-за переноса функций CoffeeScript ( docs ).Вы должны убедиться, что все символы, которые вы хотите использовать, будут экспортированы в то место, куда вы сможете их получить ( здесь - это подробное обсуждение).

Редактировать: вот еще одна длинная и теоретическая, но хорошая документация по этой теме.

3 голосов
/ 16 марта 2012

Попробуйте добавить это к вашему avia_view.js.coffee

(exports ? this).Avia = Avia 

См. это для подробного объяснения.

В качестве альтернативы попробуйте это ;

window.Avia = Avia

Мы столкнулись с той же проблемой;Я настоятельно рекомендую Жасминовый рис

...