更好的卫队(Spork / RSpec)

时间:2012-08-09 18:51:34

标签: rspec bundle guard spork

我正在使用bundle exec guard作为我的主要测试跑者,我喜欢它,即使我总是关于它的n00b。

让我困扰的是我必须手动'r'重新启动它以进行任何真正的代码更改。缓慢的重载时间我很好(虽然如果像rails c reload!那样做的话会很好),但我不能忍受的是不得不切换到手动窗口并点击r。特别是当我忘记这样做的时候,并认为这一切都很好。因此,除了低效率之外,这是不一致的。

这是我的Guardfile:

guard 'spork', wait: 45 do
  watch 'config/application.rb'
  watch 'config/environment.rb'
  watch %r{^config/environments/.+\.rb$}
  watch %r{^config/initializers/.+\.rb$}
  watch 'Gemfile'
  watch 'Gemfile.lock'
  watch 'spec/spec_helper.rb' do 'spec' end
end

guard 'rspec', version: 2 do
  watch %r{^spec/.+_spec\.rb$}
  watch %r{^lib/(.+)\.rb$} do |m| "spec/lib/#{m[1]}_spec.rb" end

  watch %r{^spec/.+_spec\.rb$}
  watch %r{^app/(.+)\.rb$} do |m| "spec/#{m[1]}_spec.rb" end
  watch %r{^app/(.*)(\.erb|\.haml)$} do |m| "spec/#{m[1]}#{m[2]}_spec.rb" end
  watch %r{^lib/(.+)\.rb$} do |m| "spec/lib/#{m[1]}_spec.rb" end
  watch %r{^app/controllers/(.+)_(controller)\.rb$} do |m| ["spec/routing/#{m[1]}_routing_spec.rb", "spec/#{m[2]}s/#{m[1]}_#{m[2]}_spec.rb", "spec/acceptance/#{m[1]}_spec.rb"] end
  watch %r{^spec/support/(.+)\.rb$} do 'spec' end
  watch 'spec/spec_helper.rb' do "spec" end
  watch 'config/routes.rb' do 'spec/routing' end
  watch 'app/controllers/application_controller.rb' do 'spec/controllers' end
  # Capybara request specs
  watch %r{^app/views/(.+)/.*\.(erb|haml)$} do |m| "spec/views/**/#{m[1]}_spec.rb" end
  watch %r{^app/.*\.sass$} do 'spec/requests/*' end
end

我想做类似的事情:

watch %r{^app/models/*.rb} do system `killall bundle` end
…

但这显然是一个巨大的障碍。仍然比看到虚假传球测试滚动更好。

感谢您提供有关改善此设置的任何建议。

1 个答案:

答案 0 :(得分:0)

这是我的“第1天”编辑(也就是说,上面的那个是我在尝试时摸索 以尽可能少的学习来实现它,但这一点有点 更明智的)。这个对我来说效果更好。

notification :on
guard 'spork', wait: 45, rspec_env: { 'RAILS_ENV' => 'test' } do
  [
    %r{^config/(environments|initializers)/.+\.rb$},
    %r{^config/(application|environment|routes)\.rb$},
    %r{Gemfile(.lock)?},
    %r{^lib/},
    %r{app/(models|controllers)},
    'spec/spec_helper.rb'
  ].each do |e| watch e end
end
guard 'rspec', version: 2 do
  watch %r{^spec/.+_spec\.rb$}
  watch %r{^app/(.+)\.rb$} do |m| "spec/#{m[1]}_spec.rb" end
  watch %r{^lib/(.+)\.rb$} do |m| "spec/lib/#{m[1]}_spec.rb" end
  watch %r{^app/(.*)(\.erb|\.haml)$} do |m| "spec/#{m[1]}#{m[2]}_spec.rb" end
  watch %r{^app/views/(.+)/.*\.(erb|haml)$} do |m| "spec/views/**/#{m[1]}_spec.rb" end
  watch %r{^app/.*\.sass$} do 'spec/requests/*' end
end

工作正常。我敢打赌会有更多改进。 -☈