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
任何幫助或建議將不勝感激!