【问题标题】:Classes defined in CoffeeScript not found by Jasmine specsJasmine 规范未找到在 CoffeeScript 中定义的类
【发布时间】:2012-01-08 18:24:46
【问题描述】:

我正在 Rails 3.1 后端构建一个主干.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 的内容,但我不完全确定如何加载。在jasmine.ymlsrc_files 部分中添加显式引用似乎没有什么区别...

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

【问题讨论】:

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


    【解决方案1】:

    没有看过您的大部分代码,我怀疑这是因为 CoffeeScript 的函数包装 (docs)。您需要确保将要使用的所有符号导出到您可以获取的位置(here 对此进行了深入讨论)。

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

    【讨论】:

    • 这是问题之一;我在一个我没有包含的 .js 文件中定义了我的 Avia“命名空间”。谢谢:-)
    【解决方案2】:

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

    (exports ? this).Avia = Avia 
    

    详情请见this

    或者试试this;

    window.Avia = Avia
    

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

    【讨论】:

      猜你喜欢
      • 2013-06-14
      • 2014-02-21
      • 2014-09-30
      • 2013-05-02
      • 2012-01-25
      • 2018-04-30
      • 2021-05-20
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多