Resque 后台作业测试错误
Resque Errors on background job tests
有谁知道可以帮助我了解如何为使用 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
如有任何帮助或建议,我们将不胜感激!
通过这个,这个什么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
如有任何帮助或建议,我们将不胜感激!
通过这个,这个什么resque也推荐: