2017-03-15 48 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 

任何幫助或建議將不勝感激!

回答