我正在尝试使用Jasmine测试一些backbone.js视图(通过jasmine-headless-webkit)。一切都很好,除了我的haml-js模板在测试下无法访问。
我的视图中的以下代码运行良好:
render: =>
html = JST['views/avia_view_template']()
$(@el).html(html)..。但是当它作为Jasmine规范的一部分运行时,我得到了以下失败:
ReferenceError: Can't find variable: JST in /home/duncan/avia/app/assets/javascripts/views/avia_view.js.coffee我怀疑我在jasmine.yml中做错了什么。我已经显式地包含了模板文件,它仍然失败:
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失败,都将非常感谢。
发布于 2011-12-05 21:54:49
无需存根,只需正确设置资源路径即可。为了利用0.8.0及更高版本中的链轮集成,设置jasmine.yml文件的最佳方法如下所示:
src_dir: app/assets/javascripts
asset_paths:
- lib/assets/javascripts
src_files:
- "**/*"这将设置链轮在app/assets/javascripts和lib/assets/javascripts中查找,并告诉jasmine-headless-webkit在这两个目录中提取每个可能的文件。在这种情况下,不会使用Jasmine的普通文件要求,只使用链轮。
然后,像在JS文件中一样设置require语句。所以在‘application.js.cafe’中:
#= 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中
#= require views/avia_view_template.jst.hamljs
class window.AviaView extends Backbone.View
template: JST['views/avia_view_template']
... code ...当然,除非加载了支持链轮的Haml处理器,否则不会加载这些.hamljs模板。因此,您可能希望拥有一个至少包含以下内容的Gemfile:
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运行:
bundle exec jasmine-headless-webkit最后一件事,确保所有内容真正加载的最好方法是使用list选项:
bundle exec jasmine-headless-webkit -l这将通过JHW和链轮的文件加载器运行所有内容,并打印出要包含的文件的顺序。这将有助于诊断require问题,因为您始终必须在单个场景中同时处理茉莉式和链轮式加载。将src文件设置为完全通过链轮加载可以大大简化该过程,因此我建议使用类似于此的设置。
https://stackoverflow.com/questions/8364013
复制相似问题