Jasmine规范找不到CoffeeScript中定义的类

时间:2011-11-29 11:59:55

标签: ruby-on-rails-3.1 coffeescript jasmine

我正在Rails 3.1后端构建一个backbone.js应用程序。我正在使用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)

我的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

我需要告诉Jasmine加载avia_view.js.coffee的内容,但我不完全确定如何。在src_files的{​​{1}}部分添加显式引用似乎没有什么区别......

有人可以告诉我这里我做错了什么吗?我怀疑这很简单...

2 个答案:

答案 0 :(得分:5)

没有看到你的大部分代码,我怀疑它是因为CoffeeScript的函数包装(docs)。您需要确保将要使用的所有符号导出到可以访问它们的某个位置(here是对此的详尽讨论。)

编辑: here's关于此主题的另一篇长篇论文,但也是一篇很好的文档。

答案 1 :(得分:3)

尝试将此添加到您的avia_view.js.coffee

(exports ? this).Avia = Avia 

有关详细说明,请参阅this

或者尝试this;

window.Avia = Avia

我们遇到了同样的问题;我强烈推荐JasmineRice