【问题标题】:Rails / Rspec: How would I test #any? for Sidekiq?Rails / Rspec:我将如何测试#any?对于 Sidekiq?
【发布时间】:2015-06-24 11:42:53
【问题描述】:

我有一个障碍:

def already_syncing?
  Sidekiq::Queue.new(queue_name).any? { |q| q.args[0] == car_id }
end

我将如何测试这个?如果我像这样把它存根:

allow(Sidekiq::Queue).to receive_message_chain(:new, :any?) { true }

那么我的实际块中的条件没有测试。

【问题讨论】:

    标签: rspec sidekiq


    【解决方案1】:

    我想你要找的是and_yield:

    allow(Sidekiq::Queue).to receive_message_chain(:new, :any?).and_yield(<something>)

    这里有一些示例代码/规范(带有我不知道的值/方法调用),您可以自己尝试并根据需要进行更改:

    class SyncTest
      def already_syncing?
        Sidekiq::Queue.new(queue_name).any? { |q| q.args[0] == car_id }
      end
    
      private # values for these methods below arbitrarily defined
    
      def queue_name
        'test'
      end
    
      def car_id
        1
      end
    end
    
    RSpec.describe SyncTest do
      let(:sync_test) { described_class.new }
    
      describe '#already_syncing?' do
        let(:queue) { double('queue') }
        let(:already_syncing) { sync_test.already_syncing? }
    
        before do
          # I don't have Sidekiq available for testing, so just say
          # it's a generic class.
          stub_const('Sidekiq::Queue', Class.new)
          allow(Sidekiq::Queue).to \
            receive_message_chain(:new, :any?).and_yield(queue)
        end
    
        context "when queue's args[0] == car_id" do
          before do
            allow(queue).to receive(:args).and_return([1])
          end
    
          it 'returns true' do
            expect(already_syncing).to be true
          end
        end
    
        context "when queue's args[0] != car_id" do
          before do
            allow(queue).to receive(:args).and_return([0])
          end
    
          it 'returns false' do
            expect(already_syncing).to be false
          end
        end
      end
    end
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-10-31
      • 1970-01-01
      • 2014-10-04
      • 2019-01-16
      • 2013-03-21
      • 1970-01-01
      • 2015-03-10
      • 1970-01-01
      相关资源
      最近更新 更多