使用Resque和Rspec示例进行测试?

Gag*_*gan 7 jobs background ruby-on-rails resque

我正在使用Resque处理我的后台作业.我的模型看起来像这样

class SomeClass
  ...
  repo = Repo.find(params[:repo_id])
  Resque.enqueue(ReopCleaner, repo.id)
  ...
end

class RepoCleaner
  @queue = :repo_cleaner

  def self.perform(repo_id)
    puts "this must get printed in console"
    repo = Repo.find(repo_id)    
    # some more action here
  end
end
Run Code Online (Sandbox Code Playgroud)

现在要同步测试我已添加

Resque.inline = Rails.env.test?
Run Code Online (Sandbox Code Playgroud)

在我的config/initializers/resque.rb文件中

这应该调用#perform方法内联而不将其排入Redis并且没有任何Resque回调作为Rails.env.test?在测试环境中返回true.

"this must get printed in console"
Run Code Online (Sandbox Code Playgroud)

在测试时从不打印.我的测试也失败了.

有没有我错过的配置.目前我正在使用

resque (1.17.1)
resque_spec (0.7.0)
resque_unit (0.4.0)
Run Code Online (Sandbox Code Playgroud)

Dan*_*erg 8

我个人测试我的工人不同.我使用RSpec,例如在我的用户模型中,我测试这样的东西:

it "enqueue FooWorker#create_user" do
  mock(Resque).enqueue(FooWorker, :create_user, user.id)
  user.create_on_foo
end
Run Code Online (Sandbox Code Playgroud)

然后我有一个名为spec/workers/foo_worker_spec.rb的文件,其中包含以下内容:

require 'spec_helper'

describe FooWorker do

  describe "#perform" do
    it "redirects to passed action" do
      ...
      FooWorker.perform
      ...
    end
  end

end
Run Code Online (Sandbox Code Playgroud)

然后,您的模型/控制器测试运行得更快,并且您在测试中没有模型/控制器与工作者之间的依赖关系.你也不必在与工人无关的规格中嘲笑这么多东西.

但是,如果你不像你提到的那样去做,那对我来说很有用.我将Resque.inline = true放入我的测试环境配置中.