出于某种莫名其妙的原因,RubyMine会自动保存您所做的每一项更改,因此每次按键都会触发Guard运行您的测试!而最荒谬的是,显然没有办法禁用这个自动保存“功能”。我只是想知道,RubyMine似乎是Rails开发人员中非常受欢迎的编辑器,而Guard似乎是用于自动化测试的不可或缺的工具。由于Guard无法与RubyMine合理使用,人们如何处理使用RubyMine自动化测试?
答案 0 :(得分:147)
我整天都在使用RubyMine和Guard,事实上,Guard的一些部分已经在RubyMine中开发了。
您可以通过转到菜单中的RubyMine > Preferences
并在搜索框中输入sync
来配置自动安全行为,然后从列表中选择System Settings
。
图片显示我的设置,这些工作正常。您可能还想禁用Save files on frame deactivation
,仅在手动保存时保存文件。
我更喜欢从终端使用Guard,但您可以通过从菜单中选择Run > Edit configurations
来添加运行配置,从而将RubyMine配置为直接运行Guard:
现在,您可以点击加号+
添加新配置,然后选择IRB console
:
现在命名配置Guard
,输入Guard into IRB脚本的路径并设置项目工作目录。您可能希望将Guard参数作为IRB参数输入,例如不同的Guard组等。
我通过打开终端找到了我的Guard路径,更改为项目工作目录并输入which guard
,这导致/Users/michi/.rvm/gems/ruby-1.9.3-p194/bin/guard
用于由RVM管理的Ruby 1.9.3-p194 SDK。 / p>
接下来,您需要在Bundler
标签中检查在捆绑包的上下文中运行脚本。
现在按OK
,您就有了全新的运行配置。在启动Guard之前,您应该通过添加
interactor :simple
到Guardfile
。现在,您可以直接在RubyMine中运行(甚至调试)Guard:
享受!
答案 1 :(得分:4)
当您使用RubyMine运行防护测试时,为防护规范配置单独的数据库环境非常有用,否则您将遇到奇怪的问题(一个进程或其他冻结或给出不一致的结果。
将您的防护规范环境命名为“ci”,并在database.yml中创建一个附加条目。我使用“ci”进行连续自动化。
然后把它放在你的Guardfile中。关键是
'RAILS_ENV' => 'ci'
以下是我的设置方法:
group :spec do
guard :spork, :rspec_port => 1234, :cucumber_env => { 'RAILS_ENV' => 'ci' }, :rspec_env => { 'RAILS_ENV' => 'ci' } do
watch('config/application.rb')
watch('config/environment.rb')
watch(%r{^config/environments/.+.rb$})
watch(%r{^config/initializers/.+.rb$})
watch('spec/spec_helper.rb')
watch(%r{app/models/.+\.rb})
watch(%r{app/views/.+\.haml})
watch('Gemfile')
watch('Gemfile.lock')
watch('test/test_helper.rb')
end
# environment is 'ci'
guard :rspec, :cli => '--drb --drb-port 1234', :version => 2, :all_after_pass => false, :notification => true, :environment => 'ci' do
watch(%r{^spec/.+_spec.rb$})
watch(%r{^lib/(.+).rb$}) { |m| "spec/lib/#{m[1]}_spec.rb" }
watch('spec/spec_helper.rb') { "spec" }
# Rails example
watch(%r{^spec/.+_spec.rb$})
watch(%r{^app/(.+).rb$}) { |m| "spec/#{m[1]}_spec.rb" }
watch(%r{^lib/(.+).rb$}) { |m| "spec/lib/#{m[1]}_spec.rb" }
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",
"spec/requests/#{m[1]}_spec.rb"]
end
watch(%r{^spec/support/(.+).rb$}) { "spec" }
watch('config/routes.rb') { "spec/routing" }
watch('app/controllers/application_controller.rb') { "spec/controllers" }
# Capybara request specs
watch(%r{^app/views/(.+)/.*.(erb|haml)$}) { |m| "spec/requests/#{m[1]}_spec.rb" }
end
end
然后我跑
bundle exec guard -g spec
我也不介意让RubyMine每隔60秒自动保存一次文件,即使它启动了Guard,因为我的新MBP Retina在运行Guard时没有明显减慢。
BTW,Guard运行规范真的很棒,因为你会发现失败的测试比尝试在RubyMine中自己运行测试要快得多。即,测试基本上是在我的手指从cmd-s释放到保存时完成的。我是从终端运行的。我还没有尝试过使用RubyMine。有人想评论这样做的好处吗?我想让堆栈转储可以点击是不错的。
答案 2 :(得分:2)
这是一个非常令人沮丧的问题,并且很难将RubyMine与guard或者grunt或其他任务运行者一起使用。
我创建了一些疯狂的解决方法,但它对我来说运作得很好:
我的完整博客文章位于http://singlebrook.com/blog/saving-files-in-rubymine
答案 3 :(得分:1)
或者您可以使用以下代码在项目的根目录中添加run_guard.rb文件:
exec 'guard'
小心! Rubymine你的PATH有问题。例如,/ usr / local / bin已过滤...
答案 4 :(得分:0)