Resque 后台作业测试错误

Resque Errors on background job tests

有谁知道可以帮助我了解如何为使用 Resque 完成的后台作业编写测试的指南?

这些是我遇到的错误:

PortfoliosControllerTest#test_html_destroy_test:
NoMethodError: undefined method `id' for nil:NilClass
    test/standard_controller_tests.rb:354:in `block in do_html_destroy'
    test/standard_controller_tests.rb:353:in `do_html_destroy'
    test/standard_controller_tests.rb:38:in `block (2 levels) in `standard_controller_tests'`

Error:
DCollectionPagesControllerTest#test_html_destroy_test:
ArgumentError: wrong number of arguments (given 2, expected 1)
    app/background_jobs/destroy_portal_job.rb:4:in `perform'
    test/standard_controller_tests.rb:360:in `do_html_destroy'
    test/standard_controller_tests.rb:38:in `block (2 levels) in standard_controller_tests'

在我的控制器中,我有:

def destroy
portal_slug = params[:id]
portal = Portal.find_by_slug(portal_slug)
@portal = Portal.find(portal_slug)
update_history(@portal)

# set delete duties to resque
if @portal.destroy!
  Resque.enqueue(DestroyPortalJob, @portal.id)

  flash[:notice] = 'Portal deleted successfully.'
  redirect_to action: :archive_index

  update_history(portal)

elsif @portal == nil
  flash[:notice] = 'That portal does not exist'
  redirect_to action: :archive_index

  end
end

那么这是我的后台工作:

class DestroyPortalJob < BackgroundJobBase
  @queue = :destroy

  def self.perform(portal_id)
    super do
      interesting_collections.each do |collection|
        if klass = collection.singularize.camelize.try(:safe_constantize)
          klass.where(portal_id: portal_id).each do |object|
            begin
            @portal.destroy!
          rescue => e
            puts "Failed destroy!"
          end
          end
          @portal.destroy!
          puts "Delete!"
        end
      end
    end
  end
end

然后,在我的测试中,这是我拥有的:

def destroy
portal_slug = params[:id]
portal = Portal.find_by_slug(portal_slug)
@portal = Portal.find(portal_slug)
update_history(@portal)

# set delete duties to resque
if @portal.destroy!
  Resque.enqueue(DestroyPortalJob, @portal.id)

  flash[:notice] = 'Portal deleted successfully.'
  redirect_to action: :archive_index

  update_history(portal)

elsif @portal == nil
  flash[:notice] = 'That portal does not exist'
  redirect_to action: :archive_index
  end
 end

如有任何帮助或建议,我们将不胜感激!

通过这个,这个什么resque也推荐:

https://github.com/resque/resque/wiki/RSpec-and-Resque