2017-03-15 2 views
0

Kennt jemand eine Anleitung, die mir hilft, zu verstehen, wie Tests für Hintergrundjobs geschrieben werden, die mit Resque durchgeführt wurden?Rescue-Fehler bei Hintergrundjob-Tests

Diese sind die Fehler, die ich bekomme:

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' 

, ich habe in meinem Controller:

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 

Dann ist mein Hintergrund Job:

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 

Und dann, auf meinem Test ist das, was ich habe:

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 

Jede Hilfe oder Beratung wird sehr geschätzt!

Antwort

Verwandte Themen