如何有效地使用Jasmine来测试通过Jammit打包的javascript资源?

时间:2011-04-29 15:19:29

标签: javascript ruby-on-rails unit-testing jammit jasmine

我有一个使用Jammit组合javascript资源的rails应用,我想使用Jasmine进行我的javascript的BDD样式测试。我想知道是否有人有任何关于从Jasmine访问Jammit生成的'pacakges'的建议?

问题是Jasmine是通过在磁盘上定义要测试的JS文件列表来配置的,然后它将这些文件包含在自己的测试运行器页面中,该页面在浏览器中加载并运行。

我可以在jasmine.yml配置文件中使用Jammit打包之前引用每个JS文件...但是,Jammit已经在为我处理文件之间的依赖关系了,更重要的是,我也是需要访问Jammit生成的编译javascript templates

我也可以先手动运行Jammit来生成已编译的资产,然后运行Jasmine,但我最终必须在每次测试运行之前手动重新生成资产以测试更改,这会严重影响快速测试驱动型工作流程。

我想知道我能否以某种方式:

  • 从Jasmine的机架服务器中安装Jammit控制器,以便它可以提供Jasmine的软件包吗?这基本上和Jammit在Rails的开发环境中已经完成的工作方式相同。
  • 在执行测试之前,以某种方式挂钩进入Jasmine以在每个页面加载上打包资产?这会慢一点,但会省去一步,确保事情是最新的。

有什么建议吗?我刚刚开始这样做,所以我可能会把它弄错。任何建议将不胜感激。 :-)

谢谢! -John

2 个答案:

答案 0 :(得分:10)

这是你正在寻找的神奇组合:

  1. 使用guard gemguard-jammit gem来监控项目资产的变化
  2. 在您选择的浏览器中安装LiveReload plugin并安装guard-livereload gem,以便在规格或资产发生变化时自动重新加载浏览器。
  3. 启动防护,然后耙茉莉,然后在浏览器中加载茉莉花规格,然后按实时重新加载按钮连接到守卫开始的实时重新加载服务器
  4. 更改文件。观察神奇的事情发生,因为警卫运行jammit并指示您的浏览器刷新茉莉花规格。
  5. 这是一个让你入门的示例Guardfile:

    guard 'jammit' do
      watch(%r{public/javascripts/(.*)\.js})
      watch(%r{app/views/jst/(.*)\.jst})
      watch(%r{public/stylesheets/(.*)\.css})
    end
    
    guard 'livereload', :apply_js_live => false do
      watch(%r{app/.+\.(erb|haml)})
      watch(%r{app/helpers/.+\.rb})
      watch(%r{public/.+\.(css|js|html)})
      watch(%r{config/locales/.+\.yml})
      watch(%r{spec/javascripts/.+\.js})
    end
    

答案 1 :(得分:3)

我想出了一个好的解决方案:强制Jammit重新加载并在茉莉花开始时打包。为此,您需要编辑jasmine_config.rb文件:

require 'jammit'
module Jasmine
  class Config

    Jammit.reload!
    Jammit.package!

   end
end

我在这里写了一篇更详细的帖子:http://www.rebeccamiller-webster.com/2011/05/jammit-jasmine-bdd/