无法在rspec测试中使用redis

时间:2013-09-07 21:29:09

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

我正在尝试使用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_instanceRedis::Store.new == redis_instance都是正确的。

有没有人知道为什么这对我不起作用?我也愿意采用其他方法来存储/模拟redis。

2 个答案:

答案 0 :(得分:3)

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

答案 1 :(得分:0)

看起来将块而不是值传递给and_return会使其工作,但我不确定为什么。 e.g:

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