なんらかの不可解な理由により、RubyMine はユーザーが行ったすべての変更を自動保存するため、キーストロークごとに Guard がトリガーされてテストが実行されます! そして最もばかげたことは、この自動保存の「機能」を無効にする方法がないように見えることです。RubyMine は Rails 開発者の間で非常に人気のあるエディターのようであり、Guard はテストの自動化に使用される不可欠なツールのようです。Guard を RubyMine で合理的に使用することは不可能であるため、RubyMine でテストを自動化するにはどうすればよいでしょうか?
5 に答える
RubyMine と Guard を 1 日中使用していますが、実際、Guard の一部は RubyMine 自体で開発されています。
RubyMine > Preferences
メニューに移動sync
して検索ボックスに入力し、リストから選択することで、オートセーフ動作を構成できますSystem Settings
。
写真は私の設定を示しており、これらは正常に機能します。を無効Save files on frame deactivation
にして、手動保存でのみファイルを保存することもできます。
私はターミナルから Guard を使用することを好みますが、メニューから選択 して実行構成を追加することで、Guard を直接実行するように RubyMine を構成できます。Run > Edit configurations
プラス記号をクリックして次+
を選択すると、新しい構成を追加できますIRB console
。
次に、構成に名前を付け、 Guard
Guard へのパスを IRB スクリプトに入力し、プロジェクトの作業ディレクトリを設定します。異なる Guard グループなどのように、Guard 引数を IRB 引数として入力することができます。
ターミナルを開いて Guard へのパスを見つけ、プロジェクトの作業ディレクトリに移動しwhich guard
て/Users/michi/.rvm/gems/ruby-1.9.3-p194/bin/guard
.
次に、タブ内のバンドルのコンテキストでスクリプトを実行するをチェックする必要があります。Bundler
ここで押すOK
と、まったく新しい実行構成が作成されます。Guard を開始する前に、追加してインタラクターをシンプルに構成する必要があります。
interactor :simple
あなたにGuardfile
。これで、RubyMine 内で直接 Guard を実行 (またはデバッグ) できるようになりました。
楽しみ!
テストのために 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
私の新しい MBP Retina は Guard の実行時に著しく遅くなることはないので、RubyMine が 60 秒ごとに自動的にファイルを保存するようにしてもかまいません。
ところで、RubyMine で自分でテストを実行しようとするよりもはるかに速く失敗したテストを見つけることができるため、Guard の実行仕様は非常に優れています。つまり、テストは基本的に、cmd-s から指を離して保存するまでにほぼ完了しています。
これをターミナルから実行します。RubyMine での実行は試していません。それを行うことの利点についてコメントしたい人はいますか?スタック ダンプをクリックできるようにするといいと思います。
または、次のコードを使用して、プロジェクトのルートに run_guard.rb ファイルを追加できます。
exec 'guard'
気を付けて!Rubymine の PATH に問題があります。たとえば、 /usr/local/bin はフィルタリングされます...