在test_helper:如何在使用Test :: Unit的Rails測試中模擬記錄器?
class Logger
@@log = []
def self.info(message)
@@log.push(message)
end
def self.log
@@log
end
end
但在運行測試時,它似乎使用常規的記錄儀。
如何爲Logger創建一個模擬器?
Rails 3.0.7。
在test_helper:如何在使用Test :: Unit的Rails測試中模擬記錄器?
class Logger
@@log = []
def self.info(message)
@@log.push(message)
end
def self.log
@@log
end
end
但在運行測試時,它似乎使用常規的記錄儀。
如何爲Logger創建一個模擬器?
Rails 3.0.7。
您需要將您的記錄器分配給Rails.logger for Rails才能使用它...爲了完全實現記錄器,您需要實現所有方法http://www.ruby-doc.org/stdlib-1.9.3/libdoc/logger/rdoc/Logger.html(即#debug,#warn,#error, #fatal)
ENV["RAILS_ENV"] = "test"
require File.expand_path(File.dirname(__FILE__) + "/../config/environment")
class Logger
@@log = []
def self.info(message)
@@log.push(message)
end
def self.log
@@log
end
end
class TestLogCase < ActiveSupport::TestCase
def setup
Rails.logger = Logger
end
test "records the log" do
Rails.logger.info "My Message"
assert_true Logger.log.include?("My Message")
end
end
我建議一個較好的策略是嘲笑軌道記錄儀採用摩卡
class TestLogCase < ActiveSupport::TestCase
require 'mocha/mini_test'
test "records the log" do
Rails.logger.expects(:info).with('My message')
Rails.logger.info "My Message"
end
end
我想'ASSERT_TRUE Logger.log.include?'必須'ASSERT_TRUE Rails.logger .log.include?'? – 2012-07-10 16:49:38
好的,這有幫助。但它不是在我的測試中調用新的Logger。它似乎在調用'Rails.logger'。 – 2012-07-10 16:57:29
@BSeven 1)是的,你說的是正確的。 2)但是這個記錄器變成了Rails.logger。所以它應該使用你的記錄器。 – 2012-07-10 17:34:06