8

rspec テスト用にmock_redis gem を使用して 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

残念ながら、まだ get と set が実際の redis インスタンスに送信されているのを確認できます。redis を強制終了すると、テストはすべて失敗します。ブレークポイントを追加してみましたが、このコード ブロックが適切に実行されていることがわかります。beforeまた、このブロックの範囲内で、Redis.new == redis_instanceとの両方Redis::Store.new == redis_instanceが真であることも確認しました。

なぜこれがうまくいかないのか、誰かが洞察を持っていますか? 私は、redis のスタブ化/モック化のための別のアプローチにもオープンです。

4

2 に答える 2

4

and_return理由はわかりませんが、値の代わりにブロックを渡して機能させるようです。例えば:

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

mock_redis にも問題があります。私の問題を解決したfakeredis https://github.com/guilleiguaran/fakeredisを見つけました。

于 2013-09-09T10:06:04.830 に答える