8

我正在尝试使用mock_redis gem 为我的 rspec 测试存根 redis。我的 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

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

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

4

2 回答 2

4

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

于 2013-09-09T10:06:04.830 回答
4

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

Redis.stub(:new).and_return { redis_instance }
Redis::Store.stub(:new).and_return { redis_instance }
于 2013-09-07T21:50:33.780 回答