Ruby on rails 重新确认后台作业测试中的错误

Ruby on rails 重新确认后台作业测试中的错误,ruby-on-rails,resque,Ruby On Rails,Resque,有人知道一个指南可以帮助我理解如何为用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_controll

有人知道一个指南可以帮助我理解如何为用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

任何帮助或建议都将不胜感激

通过这个,这也是resque建议的:

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