53

なんらかの不可解な理由により、RubyMine はユーザーが行ったすべての変更を自動保存するため、キーストロークごとに Guard がトリガーされてテストが実行されます! そして最もばかげたことは、この自動保存の「機能」を無効にする方法がないように見えることです。RubyMine は Rails 開発者の間で非常に人気のあるエディターのようであり、Guard はテストの自動化に使用される不可欠なツールのようです。Guard を RubyMine で合理的に使用することは不可能であるため、RubyMine でテストを自動化するにはどうすればよいでしょうか?

4

5 に答える 5

149

RubyMine と Guard を 1 日中使用していますが、実際、Guard の一部は RubyMine 自体で開発されています。

RubyMine > Preferencesメニューに移動syncして検索ボックスに入力し、リストから選択することで、オートセーフ動作を構成できますSystem Settings

RubyMine の自動セーフ動作を構成する

写真は私の設定を示しており、これらは正常に機能します。を無効Save files on frame deactivationにして、手動保存でのみファイルを保存することもできます。

私はターミナルから Guard を使用することを好みますが、メニューから選択 して実行構成を追加することで、Guard を直接実行するように RubyMine を構成できます。Run > Edit configurations

プラス記号をクリックして次+を選択すると、新しい構成を追加できますIRB console

新しい実行構成を追加する

次に、構成に名前を付け、 GuardGuard へのパスを IRB スクリプトに入力し、プロジェクトの作業ディレクトリを設定します。異なる Guard グループなどのように、Guard 引数を IRB 引数として入力することができます。

実行構成を構成する

ターミナルを開いて Guard へのパスを見つけ、プロジェクトの作業ディレクトリに移動しwhich guard/Users/michi/.rvm/gems/ruby-1.9.3-p194/bin/guard.

次に、タブ内のバンドルのコンテキストでスクリプトを実行するをチェックする必要があります。Bundler

bundle exec で実行

ここで押すOKと、まったく新しい実行構成が作成されます。Guard を開始する前に、追加してインタラクターをシンプルに構成する必要があります。

interactor :simple

あなたにGuardfile。これで、RubyMine 内で直接 Guard を実行 (またはデバッグ) できるようになりました。

警備員の活躍

楽しみ!

于 2012-08-17T06:27:14.283 に答える
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

私の新しい MBP Retina は Guard の実行時に著しく遅くなることはないので、RubyMine が 60 秒ごとに自動的にファイルを保存するようにしてもかまいません。

ところで、RubyMine で自分でテストを実行しようとするよりもはるかに速く失敗したテストを見つけることができるため、Guard の実行仕様は非常に優れています。つまり、テストは基本的に、cmd-s から指を離して保存するまでにほぼ完了しています。

これをターミナルから実行します。RubyMine での実行は試していません。それを行うことの利点についてコメントしたい人はいますか?スタック ダンプをクリックできるようにするといいと思います。

于 2012-10-29T21:27:01.917 に答える
1

または、次のコードを使用して、プロジェクトのルートに run_guard.rb ファイルを追加できます。

exec 'guard'

気を付けて!Rubymine の PATH に問題があります。たとえば、 /usr/local/bin はフィルタリングされます...

于 2012-10-10T11:40:16.717 に答える