3

我正在 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在部分中添加显式引用jasmine.yml似乎没有什么区别......

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

4

2 回答 2

5

在没有看过你的大部分代码的情况下,我怀疑这是因为 CoffeeScript 的函数包装(docs)。您需要确保将要使用的所有符号都导出到您可以获取它们的地方(这里是关于此的全面讨论)。

编辑: 这是关于这个主题的另一个冗长和理论但很好的文档。

于 2011-11-29T14:52:02.360 回答
3

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

(exports ? this).Avia = Avia 

有关详细说明,请参阅此内容。

或者试试这个

window.Avia = Avia

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

于 2012-03-16T11:11:16.913 回答