小编Mat*_*ieu的帖子

Sidekiq::测试.假的!不伪造 Sidekiq::Queue

我有一个简单的工作人员正在访问其自己的队列的大小:

需要“sidekiq/api”

class TestWorker
  include Sidekiq::Worker

  def perform(*args)
    Sidekiq::Queue.new('test').size
  end
end
Run Code Online (Sandbox Code Playgroud)

然后我正在测试这个工人:

require 'rails_helper'

RSpec.describe TestWorker, type: :worker do
  describe '#perform' do
    it 'executes the job without connecting to Redis in the testing environment' do
      require 'sidekiq/testing'
      Sidekiq::Testing.fake! do
        TestWorker.perform_async
        TestWorker.drain
      end
    end
  end
end
Run Code Online (Sandbox Code Playgroud)

此测试失败,因为它尝试访问 redis:

1) TestWorker#perform executes the job without connecting to Redis in the testing environment
     Failure/Error: Sidekiq::Queue.new('test').size

     Redis::CannotConnectError:
       Error connecting to Redis on 127.0.0.1:6379 (Errno::ECONNREFUSED)
     # /home/matthieu/.rvm/gems/ruby-2.4.3/gems/redis-4.0.1/lib/redis/client.rb:344:in `rescue in establish_connection'
     # /home/matthieu/.rvm/gems/ruby-2.4.3/gems/redis-4.0.1/lib/redis/client.rb:328:in `establish_connection'
     # /home/matthieu/.rvm/gems/ruby-2.4.3/gems/redis-4.0.1/lib/redis/client.rb:99:in …
Run Code Online (Sandbox Code Playgroud)

rspec ruby-on-rails rspec-rails sidekiq rspec-sidekiq

2
推荐指数
1
解决办法
5857
查看次数