2013-09-07 2 views
3

Я пытаюсь заглушить redis, используя драгоценный камень mock_redis для тестов rspec. Мой 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 

К сожалению, я до сих пор вижу получает и устанавливает его передачу моего фактического экземпляр Redis, и если я убью Redis, то мои тесты все терпят неудачу. Я попытался добавить точку останова, и я вижу, что этот блок кода выполняется правильно. Я также подтвердил, что в рамках этого блока before выполняются как Redis.new == redis_instance, так и Redis::Store.new == redis_instance.

У кого-нибудь есть представление о том, почему это не работает для меня? Я открыт для альтернативных подходов для укупорки/издевки redis.

ответ

0

Похоже, что переход блока вместо значения в and_return заставляет его работать, хотя я не уверен, почему. например:

Redis.stub(:new).and_return { redis_instance } 
Redis::Store.stub(:new).and_return { redis_instance } 
Смежные вопросы