后台作业测试中的Resque错误

时间:2017-03-15 21:19:56

标签: 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_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

非常感谢任何帮助或建议!

1 个答案:

答案 0 :(得分:0)

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

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