如何将Karma与Rails资产管道集成?

时间:2013-08-15 00:06:13

标签: ruby-on-rails angularjs asset-pipeline karma-runner

我想在我的AngularJS + Rails项目中使用Karma测试运行器。有没有人成功整合它们?更具体地说,我有兴趣知道如何与资产管道集成(我的文件扩展名为.coffee.erb,需要预处理两次)。

我使用Karma版本0.10.1和Rails 4。

任何帮助/示例都将不胜感激。

4 个答案:

答案 0 :(得分:12)

我一直在努力在我的rails应用程序中标记Karma意识到Sprockets,并设法提供解决方案。您需要一个rake任务来获取application.js中声明的资产列表,并将它们注入您的Karma配置文件的files数组中。

在我的佣金任务中,我有这个:

sprockets = Rails.application.assets
sprockets.append_path Rails.root.join("spec/karma")
files = Rails.application.assets.find_asset("application_spec.js").to_a.map {|e| e.pathname.to_s }

以及我的业力配置文件:

files: [
  APPLICATION_SPEC,
  'app/assets/javascripts/angular/*/*.{coffee,js}',
  'spec/javascripts/**/*_spec.{coffee,js}'
]

我将APPLICATION_SPEC替换为所有链轮files。如果你想要全局,我写了tutorial

答案 1 :(得分:1)

我没有将它们整合在一起,但对于我的项目,我选择了另一种方式,并完全分开服务。所以我在不同的目录中创建了一个rails应用程序和一个角度应用程序,然后我将角度应用程序sym链接到rails应用程序的公共目录中,以便rails服务器将提供角度脚本和模板。

我这样做的逻辑是我不想在同一组代码中使用两个不同的预处理器,而且我不相信测试工具会相互配合。我还选择使用ng-boilerplate附带的构建脚本,这些脚本正在完成相当多的工作,否则将通过rake或其他工具完成。

我一直在编写基于此的教程系列,可以在这里找到:http://technpol.wordpress.com/2013/08/11/rails-app-for-angularjs-simple-application/

答案 2 :(得分:1)

到目前为止我见过的一些替代方案:

答案 3 :(得分:0)

我通过以下方式让Karma和Angular发挥得很好:

添加到您的development.rb文件中:

config.assets.prefix = "/dev-assets"

这会将您的资源预编译到public/dev-assets文件夹中,与生产将转到public/assets的方式相同。然后,您可以添加到您的业力配置:

files: [
    ...
    './public/dev-assets/*.js'`,
    ...
];