1

test_helperの場合:

class Logger
    @@log = []

  def self.info(message)
    @@log.push(message)
  end

  def self.log
    @@log
  end
end

しかし、テストを実行するときは、通常のロガーを使用しているようです。

ロガーのモックを作成するにはどうすればよいですか?

Rails3.0.7。

4

3 に答える 3

5

より良い戦略は、モカを使用してレールロガーをモックすることです。

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
于 2014-09-17T10:22:50.623 に答える
1

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
于 2012-07-10T16:34:02.010 に答える
0

モカを使う

  before do
    logger = mock
    MyModel.any_instance.stubs(:logger).returns(logger)
    logger.stubs(:debug).returns(true)
  end
于 2020-02-20T23:29:42.550 に答える