2017-06-28 3 views
0

I持って、次のモデル試験:以下のモデルのコードでRails.loggerが開発とテストで同じログファイルに書き込むのはなぜですか?

describe 'Checking for errors' do 
    it 'should check for any jobs that have errors and log them' do 
     logger = Logger.new('log/go_job_errors_test.log') 
     code_location = create(:code_location_with_best_code_set) 
     code_location.jobs << create(:complete_job, status: 3, exception: 'I failed to complete') 
     CodeLocationJobFeeder.create(code_location_id: code_location.id, url: code_location.repository.url, status: 2) 
     CodeLocationJobFeeder.check_for_errors(1) 
     logger.expects(:info).with("I failed to complete") 
    end 

def check_for_errors(amount) 
    processed.limit(amount).each do |code_location_job_feeder| 
    code_location = CodeLocation.includes(:jobs).find(code_location_job_feeder.code_location_id) 
    log_error(code_location) unless code_location.jobs.last.status != 3 
    end 
end 

private 

def log_error(code_location) 
    logger = Logger.new('log/go_job_errors.log') 
    failed_job = code_location.jobs.last 
    logger.info do 
    "Job #{failed_job.id} with code location: #{code_location.id} failed. Exception: #{failed_job.exception}" 
    end 
end 

テストの要旨は、私がCodeLocationJobFeeder.check_for_errorsを実行したときに、私は意志個別のログファイルを持っているだろうということです何らかのエラーに関して私が望むすべての情報を教えてください。これは開発でうまく動作し、私は私が望むファイルを取得します。私は、テストを実行したときしかし、私は次の出力でlog/go_job_errors_test.loglog/go_job_errors.logの両方で出力を得る:

log/go_job_errors.log 

[2017-06-28T18:23:46.164141 #29604] INFO -- : Job 40 with code location: 93 failed. Exception: I failed to complete 

これは私が望む内容であるが、間違ったファイルに。 2番目のファイルは次のとおりです。

log/go_job_error_test.log 

# Logfile created on 2017-06-28 18:40:59 +0000 by logger.rb/47272 

正しいファイルが間違っています。

私はこのs.oを適用しようとしています。答えはLogger testですが、あまりにもうまく動作していないようです。誰かが私が間違っていることを指摘することができますか?

+0

テストで作成するロガーは無視されるためです。誰もそれを使用しません。モデルは独自のロガーに書き込みます。 –

答えて

0

この行の "Logger.new( 'log/go_job_errors.log')は、モデルのエラーをこのファイル 'log/go_job_errors.log'に記録するように指示しています。環境に関係なく、モデルのエラーは常に 'log/go_job_errors.log'に記録されます。

テストでは、この行で始まります。この行は 'Logger.new(' log/go_job_errors_test.log ')で始まります。新しいログファイル。テストでモデルを呼び出すと、モデルは 'log_error(code_location)'を呼び出しますが、そのメソッドは 'log/go_job_errors.log'にのみログを記録します。

関連する問題