test_helperの場合:
class Logger
@@log = []
def self.info(message)
@@log.push(message)
end
def self.log
@@log
end
end
しかし、テストを実行するときは、通常のロガーを使用しているようです。
ロガーのモックを作成するにはどうすればよいですか?
Rails3.0.7。
test_helperの場合:
class Logger
@@log = []
def self.info(message)
@@log.push(message)
end
def self.log
@@log
end
end
しかし、テストを実行するときは、通常のロガーを使用しているようです。
ロガーのモックを作成するにはどうすればよいですか?
Rails3.0.7。
より良い戦略は、モカを使用してレールロガーをモックすることです。
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
Railsで使用するには、ロガーをRails.loggerに割り当てる必要があります...ロガーを完全に実装するには、すべてのメソッド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
モカを使う
before do
logger = mock
MyModel.any_instance.stubs(:logger).returns(logger)
logger.stubs(:debug).returns(true)
end