【问题标题】:Testing Resque + Redis in RSpec在 RSpec 中测试 Resque + Redis
【发布时间】:2015-03-12 02:30:20
【问题描述】:

我在生产中使用 Redis + Resque,并想测试作业是否正在排队并正常运行。我正在寻找类似的东西

Resque.jobs(:queue_name).size.should == 0

post :some_action # This action causes a Resque job to be enqueued

# Test Enqueuing
Resque.jobs(:queue_name).size.should == 1
Resque.jobs(:queue_name).last.klass.should == "MyJob"
Resque.jobs(:queue_name).last.args.should == [1, "Arg_2"]
# Test performing
Resque.jobs(:queue_name).perform_all
# test the effect of running the job

如何在测试环境中启动 Redis + Resque?我不会一直手动运行 redis 服务器。我已经尝试过您尝试在config.before(:suite) 中运行 redis 服务器的解决方案,但是 redis-server 永远不会及时启动,并且 Resque 抱怨它无法连接到 Redis。

我尝试过使用Resque.inline,但是 1) 它不允许我测试作业是否已入队 2) 它总是将作业排入 :inline 队列中(我想测试作业是否最终在正确的队列中)。

【问题讨论】:

    标签: ruby-on-rails rspec redis resque


    【解决方案1】:

    就个人而言,我依赖于我项目中包含的 gem,包括 Resque 和 Redis,由编写它们的开发人员进行测试。因此,我没有在我的测试套件中测试它们。例如,在为我的应用程序选择 gem 时,我会查看 gem 的文档以查看是否包含 TravisCI / Code Climate / 等统计信息以及项目是否“绿色”。如果是,我会使用它。如果不是,我会寻找更早的(例如更稳定的)版本,或者寻找替代品。在 Resque 和 Redis for Rails 的情况下,它们都得到了很好的维护和流行,因此非常稳定。

    对于我的应用程序,我只是编写测试,在其中展示对 Resque / Redis 调用消息的期望。例如:

    it "should make a call to Resque for #my_job" do
      expect(Resque).to_receive(:enqueue).with(SomeJob, args)
    
      my_method_which_calls_resque
    end
    

    然后,假设您有一个正在测试的名为my_method_which_calls_resque 的方法,看起来像:

    def my_method_which_calls_resque
      ...
    
      Resque.enqueue(SomeJob, args)
    
      ...
    end
    

    这个测试应该会成功。

    有关消息和设置 RSpec 期望的其他文档,请参阅RelishApp's docs on message expectations.

    然后,如果您希望在 Resque 作业本身中测试您的代码,您可以为您的作业创建一个 RSpec 测试。示例:

    # spec/lib/jobs/some_job_spec.rb
    
    describe Jobs::SomeJob do
      describe "#perform" do
        it "should update someone's account" do
          ...
        end
      end
    end
    

    【讨论】:

    • 我不是在尝试测试 Redis 或 Resque(我非常有信心它们可以工作),我正在尝试我的应用程序代码。我想测试我的应用程序中的某些操作是否会导致具有正确参数的作业在 Resque 中排队,并且当作业运行时,结果状态(例如更新某人的帐户)也是正确的。
    • 好。如果您想测试某些操作是否会导致作业与参数一起排队,那么我所描述的正是您需要做的事情来测试作业是否排队。然后在单独的单元测试中测试代码within。 :)
    猜你喜欢
    • 2013-09-11
    • 2018-05-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-07-05
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多