7

我有一个使用Jammit组合 javascript 资产的 rails 应用程序,我想使用Jasmine对我的 javascript 进行 BDD 样式测试。我想知道是否有人对从 Jasmine 中访问 Jammit 生成的“pacakges”有任何建议?

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

在将它们与 Jammit 打包之前,我可以在 jasmine.yml 配置文件中引用每个单独的 JS 文件......但是,Jammit 已经在为我处理文件之间的依赖关系,更重要的是,我还需要访问Jammit 生成的已编译javascript 模板。

我也可以手动运行 Jammit 以首先生成已编译的资产,然后运行 ​​Jasmine,但我最终不得不在每次测试运行之前手动重新生成资产以测试更改,这将严重限制快速测试 -驱动型工作流程。

我想知道我是否可以:

  • 从 Jasmine 的机架服务器中安装 Jammit 控制器,以便它可以提供来自 Jasmine 的包?这基本上与 Jammit 在 Rails 的开发环境中所做的工作方式相同。
  • 在执行测试之前以某种方式连接到 Jasmine 以在每个页面加载时打包资产?这会更慢,但会为我节省一步并确保事情是最新的。

有什么建议么?我才刚刚开始,所以我可能会做错一切。任何建议将不胜感激。:-)

谢谢!-约翰

4

2 回答 2

10

这是您正在寻找的魔法组合:

  1. 使用guard gemguard-jammit gem来观察项目资产的变化
  2. 在您选择的浏览器中安装LiveReload 插件并安装guard-livereload gem,这样您就可以在您的规格或资产发生变化时自动重新加载浏览器。
  3. 启动警卫,然后 rake jasmine,然后在浏览器中加载你的茉莉花规格,然后按实时重载按钮连接到警卫启动的实时重载服务器
  4. 更改您的文件。当警卫运行 jammit 并指示您的浏览器刷新 jasmine 规范时,观看魔术发生。

这是一个示例 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
于 2011-05-20T00:15:47.363 回答
3

我想出了一个好的解决方案:当 jasmine 启动时强制 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/

于 2011-05-19T23:43:40.410 回答