【问题标题】:Unable to stub redis in rspec tests无法在 rspec 测试中存根 redis
【发布时间】:2013-09-11 18:03:21
【问题描述】:

我正在尝试使用 mock_redis gem 对 redis 进行 rspec 测试。我的 rspec 配置如下所示:

RSpec.configure do |config|
  # ... various rspec config options ...

  config.before(:each) do
    redis_instance = MockRedis.new
    Redis.stub(:new).and_return(redis_instance)
    Redis::Store.stub(:new).and_return(redis_instance)
  end
end

不幸的是,我仍然看到 get 和 set 被发送到我的实际 redis 实例,如果我杀死 redis,那么我的测试都会失败。我尝试添加一个断点,我确实看到这段代码正在正确执行。我还确认,在这个 before 块的范围内,Redis.new == redis_instanceRedis::Store.new == redis_instance 都是正确的。

有没有人知道为什么这对我不起作用?我也对存根/模拟 redis 的替代方法持开放态度。

【问题讨论】:

    标签: ruby-on-rails rspec mocking redis stub


    【解决方案1】:

    看起来像传递一个块而不是一个值给and_return 使它工作,虽然我不知道为什么。例如:

    Redis.stub(:new).and_return { redis_instance }
    Redis::Store.stub(:new).and_return { redis_instance }
    

    【讨论】:

      【解决方案2】:

      我也遇到了 mock_redis 的问题。我发现 fakeredis https://github.com/guilleiguaran/fakeredis 决定了我的问题。

      【讨论】:

        猜你喜欢
        • 2015-03-12
        • 2016-11-04
        • 1970-01-01
        • 1970-01-01
        • 2021-04-12
        • 1970-01-01
        • 1970-01-01
        • 2011-09-17
        • 1970-01-01
        相关资源
        最近更新 更多