ruby-on-rails - 如何 rspec 模拟 ruby​​ rails 记录器类

标签 ruby-on-rails ruby logging rspec mocking

嗨,我正在尝试 rspec 模拟以下类:

    class Person
      def initialize(personid)
        Rails.logger.debug "Creating person with id #{personid}"
      end
    end

使用这个:

require 'spec_helper'
  describe Person do
    describe "#initialize" do
      let(:rails_mock) { double("Rails").as_null_object }
      let(:logger_mock) { double("Rails.logger").as_null_object }

      it "logs a message" do
        rails_mock.stub(:logger).and_return(logger_mock)
        logger_mock.should_receive(:debug)
        Person.new "dummy"
      end
   end
end

并收到此消息:

RSpec::Mocks::MockExpectationError: (Double "Rails.logger").debug(any args)
expected: 1 time
received: 0 times

任何帮助都会很棒!

最佳答案

我会:

Rails.stub_chain(:logger, :debug).and_return(logger_mock)

不要忘记在测试结束时取消 stub :

Rails.unstub(:logger)

关于ruby-on-rails - 如何 rspec 模拟 ruby​​ rails 记录器类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8249815/

相关文章:

mysql - 扩展 ruby​​、activerecord、mysql 应用程序

ruby-on-rails - rails 5 : Bundler could not find compatible versions for gem “actionpack” :

ruby-on-rails - RSpec 异常后继续

ruby-on-rails - 如何更改 Rails 应用程序数据?

javascript - $ ('h1' ) 如何作为 jQuery 中的数组登录到 Web 控制台?

c# - 同时在控制台和文件上写入文本

ruby-on-rails - Puma 输出像薄带 rails

ruby-on-rails - Rails 6 pluralize(count, word) VS word.pluralize(count) - 不同的结果

CSS 不识别类

java - Log4j2 HTMLLayout 配置和输出