2

これをオンラインで行う方法についてはあまり情報がありませんでしたが、Guardfile で、watchGuard に変更を監視させたいさまざまなディレクトリ/ファイルを設定しています。spec/test更新された変更済みファイルの監視を指定し、それが発生したときにその特定のファイルのみを実行するにはどうすればよいでしょうか? ありがとう!

guard 'rspec' do
  watch(%r|^spec/.+_spec\.rb$|)               { "spec" }
end

現在、ディレクトリの下でファイルが変更されると、上記はすべての仕様/テストを実行しますspec。しかし、変更されたテストファイルのテストを実行したいだけです。

現在のspecディレクトリ ツリー:

spec
 -models
  -user_spec.rb
  -classroom_spec.rb
 -controllers
  -classroom_spec.rb
 -lib
  -support_spec.rb

ありがとう!

4

1 に答える 1

3

Guard RSpecプラグインには、で作成できるデモGuardfileがあります

$ bundle exec guard init rspec

内容は次のとおりです。

# A sample Guardfile
# More info at https://github.com/guard/guard#readme

guard 'rspec' 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{^app/(.+)\.rb$})                           { |m| "spec/#{m[1]}_spec.rb" }
  watch(%r{^app/(.*)(\.erb|\.haml)$})                 { |m| "spec/#{m[1]}#{m[2]}_spec.rb" }
  watch(%r{^app/controllers/(.+)_(controller)\.rb$})  { |m| ["spec/routing/#{m[1]}_routing_spec.rb", "spec/#{m[2]}s/#{m[1]}_#{m[2]}_spec.rb", "spec/acceptance/#{m[1]}_spec.rb"] }
  watch(%r{^spec/support/(.+)\.rb$})                  { "spec" }
  watch('config/routes.rb')                           { "spec/routing" }
  watch('app/controllers/application_controller.rb')  { "spec/controllers" }

  # Capybara features specs
  watch(%r{^app/views/(.+)/.*\.(erb|haml)$})          { |m| "spec/features/#{m[1]}_spec.rb" }

  # Turnip features and steps
  watch(%r{^spec/acceptance/(.+)\.feature$})
  watch(%r{^spec/acceptance/steps/(.+)_steps\.rb$})   { |m| Dir[File.join("**/#{m[1]}.feature")][0] || 'spec/acceptance' }
end

ファイル/フォルダーの命名と関連する仕様のトリガーに関する多くのベストプラクティスが含まれているため、これに固執することをお勧めします。

質問に答えるために、watch式のブロックを省略すると、Guardは変更が加えられた正確なファイルを使用します。

guard 'rspec' do
  watch(%r|^spec/.+_spec\.rb$|)
end

これにより、で終わるspecフォルダー内の変更されたファイルごとにRSpecプラグインがトリガーされます_spec.rb

ウォッチ式のブロックは、ファイル名を別のものに変換するためのものであり、黒のパラメーターは正規表現と一致するため、特別なロジックを追加できます。これを示す短い例:

watch(%r{^lib/(.+)\.rb$})     { |m| "spec/lib/#{m[1]}_spec.rb" }

ファイルを変更するlib/file.rbとプラグインがトリガーされ、ブロックはそのファイル名をに変換します。これは、RegExpからの一致グループが含まれているspec/lib/file_spec.rbためです。m[1]file

于 2013-02-28T10:40:42.113 に答える