由于某种莫名其妙的原因,RubyMine会自动保存您所做的每一次更改,因此每一次按键都会触发Guard运行测试!最可笑的是,显然没有办法禁用这个自动保存的“功能”。我只是想知道,RubyMine似乎是Rails开发人员中非常流行的编辑器,而Guard似乎是用于自动化测试的不可或缺的工具。由于无法合理地使用Guard与RubyMine,人们如何处理使用RubyMine自动化测试呢?
由于某种莫名其妙的原因,RubyMine会自动保存您所做的每一次更改,因此每一次按键都会触发Guard运行测试!最可笑的是,显然没有办法禁用这个自动保存的“功能”。我只是想知道,RubyMine似乎是Rails开发人员中非常流行的编辑器,而Guard似乎是用于自动化测试的不可或缺的工具。由于无法合理地使用Guard与RubyMine,人们如何处理使用RubyMine自动化测试呢?
我整天都在使用RubyMine和Guard,实际上,Guard的一些部分是在RubyMine中开发的。
您可以通过进入菜单中的偏好设置并在搜索框中输入,然后从列表中选择<系统设置>来配置自动安全行为。
图片显示了我的设置,这些设置很好用。您可能还想禁用<当帧停用时保存文件>,只在手动保存时才保存文件。
我更喜欢在终端中使用Guard,但您可以通过从菜单中选择<运行>编辑配置来配置RubyMine直接运行Guard,然后添加一个运行配置:
现在,您可以通过点击加号<+>并选择来添加新的配置:
现在将配置命名为,将Guard路径输入到IRB脚本中,并设置项目工作目录。您可能希望将Guard参数作为IRB参数输入,例如不同的Guard组等。
我通过打开终端,转到项目工作目录并输入来找到Guard的路径,这将得到我的Ruby 1.9.3-p194 SDK由RVM管理的/Users/michi/.rvm/gems/ruby-1.9.3-p194/bin/guard
。
接下来,您需要在选项卡中勾选<在bundle上下文中运行脚本>。
现在,点击<确定>,您就拥有了一个全新的运行配置。在开始Guard之前,应该通过添加以下内容将交互器配置为简单:
interactor :simple
将它添加到你的Guardfile
中。现在你可以直接在RubyMine中运行(甚至调试)Guard:
享受吧!
which guard
命令会返回一个路径,但这其实是RBEnv使用的shim/wrap/alias的路径。要找到真正的guard脚本,你需要检查你的gems文件夹。对于作者来说,(ruby)guard脚本位于以下路径:~/.rbenv/versions/<some_ruby_version>/lib/ruby/gems/1.9.1/gems/guard-1.0.3/bin/guard
- damianmrrbenv which guard
命令获取与 rbenv 相关的 Guard 路径。 - aks'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时不会明显变慢。
顺便说一下,Guard运行测试非常好,因为你可以比在RubyMine中自己运行测试更快地发现失败的测试。也就是说,当我的手指从cmd-s释放时,测试基本上已经完成了。
我从终端运行它。我还没有尝试用RubyMine运行。有人想评论一下这样做的优点吗?我想点击堆栈转储可能会很好。
locate \*/bin/guard
,因为这是一种简单的方法来显示系统中二进制文件 guard 的所有安装情况 :) - Steve Bennerexec 'guard'
注意!Rubymine与您的PATH存在问题。例如,/usr/local/bin被过滤了...