不可解な理由により、RubyMineは変更をすべて自動保存するため、キーを押すたびにGuardがトリガーされ、テストが実行されます。そして、最もおかしなことは、この自動保存の「機能」を無効にする方法がないことです。 RubyMineはRails=開発者の間で非常に人気のあるエディターのようですが、Guardはテストの自動化に使用される不可欠なツールのようです。GuardはRubyMineで合理的に使用できないため、 RubyMineを使用してテストを自動化することはできますか?
私は一日中GuardでRubyMineを使用しています。実際、Guardの一部はRubyMine自体で開発されています。
メニューのRubyMine > Preferences
に移動して検索ボックスにsync
と入力し、リストからSystem Settings
を選択して、自動安全動作を設定できます。
写真は私の設定を示しており、これらは正常に動作します。 Save files on frame deactivation
を無効にして、手動保存でのみファイルを保存することもできます。
ターミナルからGuardを使用することを好みますが、メニューからRun > Edit configurations
を選択してRun configurationを追加することで、Guardを直接実行するようにRubyMineを構成できます。
これで、プラス記号+
をクリックしてIRB console
を選択し、新しい構成を追加できます。
次に、構成にGuard
という名前を付け、GuardへのパスをIRBスクリプトに入力し、プロジェクトの作業ディレクトリを設定します。さまざまなGuardグループなどのように、Guard引数をIRB引数として入力することができます。
ターミナルを開いてGuardへのパスを見つけ、プロジェクトの作業ディレクトリに変更してwhich guard
と入力すると、Ruby 1.9.3-p194の場合は/Users/michi/.rvm/gems/Ruby-1.9.3-p194/bin/guard
になります。 RVMによって管理されるSDK。
次に、Bundler
タブで、バンドルのコンテキストでスクリプトをRun the(= /// =)実行する必要があります。
ここでOK
を押すと、新しい実行構成ができます。 Guardを起動する前に、インタラクターを次のように追加してシンプルに設定する必要があります。
interactor :simple
あなたのGuardfile
に。これで、RubyMine内でGuardを直接実行(またはデバッグ)できます。
楽しい!
テスト用にRubyMineでガードを実行する場合、ガード仕様用に個別のデータベース環境を構成すると非常に役立ちます。そうしないと、奇妙な問題が発生します(1つのプロセスまたは他のプロセスがフリーズするか、一貫性のない結果になります)。
ガードスペック環境に「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の実行時に著しく遅くなることはないので、GuardMが起動しても、RubyMineがファイルを60秒ごとに自動的に保存するようにしても構いません。
ところで、Guardが仕様を実行していることは本当に素晴らしいです。なぜなら、RubyMineで自分でテストを実行するよりもはるかに速くテストが失敗するからです。つまり、テストは基本的に、指がcmd-sから解放されて保存されるまでに行われます。
これはターミナルから実行します。 RubyMineで実行したことはありません。誰かがそれを行うことの利点についてコメントしたいですか?スタックダンプをクリッカブルにするといいと思います。
これは本当にイライラする問題であり、RubyMineをガードやうなり声や他のタスクランナーで使用することは非常に困難です。
私は少しクレイジーな回避策を作成しましたが、それは私にとっては十分に機能しています:
これに関する私の完全なブログ投稿は http://singlebrook.com/blog/saving-files-in-rubymine にあります。
または、次のコードを使用して、プロジェクトのルートにrun_guard.rbファイルを追加できます。
exec 'guard'
気を付けて! RubymineはあなたのPATHに問題があります。たとえば、/ usr/local/binはフィルタリングされます...