使用Sidekiq :: Queue实例运行RSpec测试失败,除非Redis单独运行。
Sidekiq::Queue.new('my-queue').select(&:item)
在测试中引发错误
Redis::CannotConnectError:
Error connecting to Redis on localhost:6379 (Errno::ECONNREFUSED)
我已经将常规添加到规范助手:
require 'sidekiq/testing'
Sidekiq::Testing.inline!
mock_redis
到gemfile。
# gemfile
gem 'mock_redis', '0.16.1'
使用sidekiq (3.4.2)
如何更新配置以使其正常工作?
答案 0 :(得分:1)
mock_redis
仅提供假redis。它不拦截/替换实际的redis类/连接。如果你打算在测试中使用假redis,你应该告诉sidekiq。在你的config/initializers/sidekiq.rb
(或者你的sidekiq redis配置中):
redis = if Rails.env.test?
require 'mock_redis'
MockRedis.new
else
{ url: 'redis://redis.example.com:7372/12' }
end
Sidekiq.configure_server do |config|
config.redis = redis
end
Sidekiq.configure_client do |config|
config.redis = redis
end
答案 1 :(得分:0)
我通过在spec_helper.rb
文件中模拟Redis标记的RSpec测试来解决这个问题。
config.before(:each, redis: true) do
mock = MockRedis.new
allow(Redis).to receive(:new).and_return(mock)
end
然后在场景中:
scenario "my scenario with redis", redis: true do
...
end