Add perform method to workers in tests.

The `#perform` method allows workers to be execute all their previously
queued jobs at once.
This commit is contained in:
Pan Thomakos 2012-05-02 10:45:05 -07:00
parent 5709b8b1c9
commit b9bfc03c68
3 changed files with 29 additions and 0 deletions

View File

@ -26,6 +26,9 @@ end
- Fix delayed extensions not available in workers [#152]
- In test environments add the `#perform` class method to workers. This method
executes all previously queued jobs. (panthomakos)
1.1.4
-----------

View File

@ -33,6 +33,12 @@ module Sidekiq
def jobs
@pushed ||= []
end
def perform
while job = jobs.shift do
new.perform(*job['args'])
end
end
end
end
end

View File

@ -11,6 +11,8 @@ Sidekiq.hook_rails!
class TestTesting < MiniTest::Unit::TestCase
describe 'sidekiq testing' do
class PerformError < RuntimeError; end
class DirectWorker
include Sidekiq::Worker
def perform(a, b)
@ -25,6 +27,13 @@ class TestTesting < MiniTest::Unit::TestCase
end
end
class StoredWorker
include Sidekiq::Worker
def perform(error)
raise PerformError if error
end
end
class FooMailer < ActionMailer::Base
def bar(str)
str
@ -73,5 +82,16 @@ class TestTesting < MiniTest::Unit::TestCase
assert Sidekiq::Client.enqueue(EnqueuedWorker, 1, 2)
assert_equal 1, EnqueuedWorker.jobs.size
end
it 'executes all stored jobs' do
assert StoredWorker.perform_async(false)
assert StoredWorker.perform_async(true)
assert_equal 2, StoredWorker.jobs.size
assert_raises PerformError do
StoredWorker.perform
end
assert_equal 0, StoredWorker.jobs.size
end
end
end