Techioz Blog

Rake / Rspec: –pattern を使用してコマンドを表示する最初の出力行を抑制 / 沈黙 / サイレントにするにはどうすればよいですか?

概要

次のいずれかのコマンドを使用して、Rake 経由で ServerSpec (RSpec に基づく) を実行するとします。

Rake は、serverspec の出力の前に、実行するコマンドを stdout に出力します。

/usr/bin/ruby1.9.1 
-I/var/lib/gems/1.9.1/gems/rspec-core-3.1.6/lib:/var/lib/gems/1.9.1/gems/rspec-support-3.1.2/lib 
/var/lib/gems/1.9.1/gems/rspec-core-3.1.6/exe/rspec 
--pattern spec/<host>/\*_spec.rb

このようにターゲットホストを手動で rspec に渡すと…

TARGET_HOST=<host> rspec

…行が表示されません。

Rake がこの行/コマンドを出力しないようにするにはどうすればよいですか?

私はserverspec-initによって生成されたデフォルトのRakefileを使用しています。

require 'rake'
require 'rspec/core/rake_task'

task :spec    => 'spec:all'
task :default => :spec

namespace :spec do
  targets = []
  Dir.glob('./spec/*').each do |dir|
    next unless File.directory?(dir)
    targets << File.basename(dir)
  end

  task :all     => targets
  task :default => :all

  targets.each do |target|
    desc "Run serverspec tests to #{target}"
    RSpec::Core::RakeTask.new(target.to_sym) do |t|
      ENV['TARGET_HOST'] = target
      t.pattern = "spec/#{target}/*_spec.rb"
    end
  end
end

解決策

から変更してみてください

RSpec::Core::RakeTask.new(target.to_sym) do |t|
  ENV['TARGET_HOST'] = target
  t.pattern = "spec/#{target}/*_spec.rb"
end

RSpec::Core::RakeTask.new(target.to_sym) do |t|
  ENV['TARGET_HOST'] = target
  t.pattern = "spec/#{target}/*_spec.rb"
  t.verbose = false
end