デフォルトのRailsロガーではないログに、条件に基づいて複数のメッセージを記録する方法をテストしようとしています。ロガーをフォーマットしましたconfig/environment.rb
:
# Format the logger
class Logger
def format_message(level, time, progname, msg)
"#{time.to_s(:db)} #{level} -- #{msg}\n"
end
end
ディレクトリの ImportRecording クラスに新しいロガーを作成しましたlib/
。そのクラスのメソッドには、次のものが含まれます。
# some code omitted...
days.each do |day|
if not hash[day].include? "copied"
@log.error "#{day} needs to be copied!"
end
if not hash[day].include? "compressed"
@log.error "#{day} needs to be compressed!"
end
if not hash[day].include? "imported"
@log.debug "#{day} needs to be imported"
`rake RAILS_ENV=#{Rails.env} recordings:import[#{day}]` unless Rails.env == "test"
end
end
# finishing up logging omitted...
このメソッドのテストに役立つ小さなマクロを作成しました。
def stub_todo
{ "20130220" => ["copied"],
"20130219" => ["copied", "compressed"],
"20130218" => ["copied", "compressed", "imported"] }
end
ここに私のテストがあります:
describe ".execute_todo" do
it "carries out the appropriate commands, based on the todo hash" do
ImportRecording.execute_todo stub_todo
ImportRecording.log.should_receive(:debug).with("20130219 needs to be imported")
ImportRecording.log.should_receive(:error).with("20130220 needs to be compressed!")
ImportRecording.log.should_receive(:debug).with("20130220 needs to be imported")
end
end
これらのテストを実行し、行が追加されるのを監視しながらインポート ログを見つめます (ログが大きいため、遅延があります) が、テストはまだ失敗します。ログのフォーマットがこれを台無しにしているのだろうかと思いますが、前述の文字列をメソッドとログに渡しています。何か助けはありますか?:debug
:error
2013 年 3 月 14 日編集:
誰かがここで私を助けてくれることを期待して、テストによって次のように変更しました。
it "carries out the appropriate commands, based on the todo hash" do
ImportRecording.stub!(:execute_todo).with(stub_todo).and_return(false)
ImportRecording.log.should_receive(:debug).with("20130219 needs to be imported")
ImportRecording.log.should_receive(:error).with("20130220 needs to be compressed!")
ImportRecording.log.should_receive(:debug).with("20130220 needs to be imported")
end
そして、これは私がRSpecから得ているエラーです:
Failure/Error: ImportRecording.log.should_receive(:debug).with("20130219 needs to be imported")
(#<Logger:0x007fb04fa83ed0>).debug("20130219 needs to be imported")
expected: 1 time
received: 0 times