`find_formatter': Formatter 's' unknown - maybe you meant 'documentation' or 'progress'?. (ArgumentError)
スタックトレースを見てもソースコードの原因箇所が的確に示されていなかったので少々戸惑いましたが、結局原因はspec/spec.rakeファイルにありました。そこではspecコマンドのオプションとして"-fs —color"が指定されていたんですが、実はこの"-fs"が原因でした。"-fs"は"--format specdoc"の短縮形式で、以前はこのオプションは有効だったが無効になったみたいです。
現在はフォーマットとして指定できるのは"documentation"か"progress"になっていますが、詳細な情報を出力したいので"documentation"を指定することにします。この指定にあわせてspec/spec.rakeファイルを修正しようと思います。
Padrinoが自動生成する修正前のspec/spec.rakeファイルはこんな感じです。
begin
require 'rspec/core/rake_task'
spec_tasks = Dir['spec/*/'].inject([]) do |result, d|
result << File.basename(d) unless Dir["#{d}*"].empty?
result
end
spec_tasks.each do |folder|
RSpec::Core::RakeTask.new("spec:#{folder}") do |t|
t.pattern = "./spec/#{folder}/**/*_spec.rb"
t.rspec_opts = %w(-fs --color)
end
end
desc "Run complete application spec suite"
task 'spec' => spec_tasks.map { |f| "spec:#{f}" }
rescue LoadError
puts "RSpec is not part of this bundle, skip specs."
end
これを以下のように変更します。
begin
require 'rspec/core/rake_task'
spec_tasks = Dir['spec/*/'].inject([]) do |result, d|
result << File.basename(d) unless Dir["#{d}*"].empty?
result
end
spec_tasks.each do |folder|
desc "Run spec suite under #{folder} directory"
RSpec::Core::RakeTask.new("spec:#{folder}") do |t|
t.pattern = "./spec/#{folder}/**/*_spec.rb"
t.rspec_opts = %w(--format documentation --color)
t.verbose = false
end
end
desc "Run complete application spec suite"
RSpec::Core::RakeTask.new("spec") do |t|
t.pattern = "./spec/**/*_spec.rb"
t.rspec_opts = %w(--format documentation --color)
t.verbose = false
end
rescue LoadError
puts "RSpec is not part of this bundle, skip specs."
end
変更点としては、-fsオプションをやめて--format documentationにしたこと、
t.verbose = falseを追加したこと、"spec"タスクを"spec:フォルダ"の集合ではなく
新たに全specファイルを含むタスクとして定義したことです。
t.verbose = falseを指定するのは、長ったらしい実行コマンドの出力を省いて出力を見やすくするためです。また、"spec"タスクが"spec:フォルダ"の集合だと、何件成功して何件失敗したか、という結果がフォルダの実行ごとに表示されるので見づらくなるので、対象を全てにした1つのテストスイートにまとめなおしています。
※この記事について指摘・意見・提案・感想などありましたら下のコメント欄にどうぞ。
0 件のコメント:
コメントを投稿