首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在Jasmine测试运行期间找不到haml-js模板

在Jasmine测试运行期间找不到haml-js模板
EN

Stack Overflow用户
提问于 2011-12-03 07:32:03
回答 1查看 1.2K关注 0票数 0

我正在尝试使用Jasmine测试一些backbone.js视图(通过jasmine-headless-webkit)。一切都很好,除了我的haml-js模板在测试下无法访问。

我的视图中的以下代码运行良好:

代码语言:javascript
复制
render: =>
  html = JST['views/avia_view_template']()
  $(@el).html(html)

..。但是当它作为Jasmine规范的一部分运行时,我得到了以下失败:

代码语言:javascript
复制
ReferenceError: Can't find variable: JST in /home/duncan/avia/app/assets/javascripts/views/avia_view.js.coffee

我怀疑我在jasmine.yml中做错了什么。我已经显式地包含了模板文件,它仍然失败:

代码语言:javascript
复制
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失败,都将非常感谢。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2011-12-05 21:54:49

无需存根,只需正确设置资源路径即可。为了利用0.8.0及更高版本中的链轮集成,设置jasmine.yml文件的最佳方法如下所示:

代码语言:javascript
复制
src_dir: app/assets/javascripts
asset_paths:
- lib/assets/javascripts
src_files:
- "**/*"

这将设置链轮在app/assets/javascriptslib/assets/javascripts中查找,并告诉jasmine-headless-webkit在这两个目录中提取每个可能的文件。在这种情况下,不会使用Jasmine的普通文件要求,只使用链轮。

然后,像在JS文件中一样设置require语句。所以在‘application.js.cafe’中:

代码语言:javascript
复制
#= 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

代码语言:javascript
复制
#= require views/avia_view_template.jst.hamljs

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

当然,除非加载了支持链轮的Haml处理器,否则不会加载这些.hamljs模板。因此,您可能希望拥有一个至少包含以下内容的Gemfile:

代码语言:javascript
复制
gem 'jasmine-headless-webkit'
gem 'haml-sprockets'
# also bring in backbone and jquery
gem 'jquery-rails'
gem 'backbone-rails'

然后,如果您的应用程序本身知道在加载这些已提供的JS gem时该做什么,那么您就可以摆脱自己的jQuery和Backbone副本,并且您还可以使用.hamljs模板。在这一点上,您应该使用Bundler运行:

代码语言:javascript
复制
bundle exec jasmine-headless-webkit

最后一件事,确保所有内容真正加载的最好方法是使用list选项:

代码语言:javascript
复制
bundle exec jasmine-headless-webkit -l

这将通过JHW和链轮的文件加载器运行所有内容,并打印出要包含的文件的顺序。这将有助于诊断require问题,因为您始终必须在单个场景中同时处理茉莉式和链轮式加载。将src文件设置为完全通过链轮加载可以大大简化该过程,因此我建议使用类似于此的设置。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/8364013

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档