如何强制Karma重新加载http服务javascript?

时间:2013-11-13 09:19:31

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

我从@danott那里看到了这篇有趣的文章(http://danott.co/posts/rails-javascript-testing-using-karma.html)关于 Rails使用Karma进行Javascript测试

我自己用最新版本的业力测试了它,但我遇到了一个问题:

如果我在karma配置中设置singleRun = false,它不会重新加载从Rails应用程序的本地运行实例提供的application.js文件。

files: [
    'http://myapp.dev/assets/application.js',
    ...
]

我希望每次更改某些代码时都自动运行测试,而不是将其设置为singleRun并自行触发测试。在执行新一轮测试之前,我可以以某种方式告诉业务重新加载application.js文件吗?

2 个答案:

答案 0 :(得分:0)

假设有一个Rail的堆栈,你应该设置一个文件模式来监视你的资产文件夹,但是不能在你的测试中包含或提供这些文件。

// spec/karma/config/unit.js
files = [
  JASMINE,
  JASMINE_ADAPTER,
  'http://rails.dev/assets/application.js',
  'spec/javascripts/*.js',
  { pattern: 'app/assets/javascripts/*.js', // <-- this is the bit that's important
    watched: true,
    included: false,
    served: false }
]

答案 1 :(得分:0)

让Karma通过HTTP获取application.js会强制您运行开发环境并应用像@danott这样的监视模式。

如果您使用rake任务通过注入application.js中所需的所有文件使Karma了解Sprockets,则您没有此约束。

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

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