2017-03-15 4 views
0

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_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 

何か助けやアドバイスをいただければ幸いです!

答えて

関連する問題