From b9bfc03c683ca76b45039682cf167247d492ef61 Mon Sep 17 00:00:00 2001 From: Pan Thomakos Date: Wed, 2 May 2012 10:45:05 -0700 Subject: [PATCH 1/2] Add perform method to workers in tests. The `#perform` method allows workers to be execute all their previously queued jobs at once. --- Changes.md | 3 +++ lib/sidekiq/testing.rb | 6 ++++++ test/test_testing.rb | 20 ++++++++++++++++++++ 3 files changed, 29 insertions(+) diff --git a/Changes.md b/Changes.md index 2f8e6a19..8484a0d7 100644 --- a/Changes.md +++ b/Changes.md @@ -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 ----------- diff --git a/lib/sidekiq/testing.rb b/lib/sidekiq/testing.rb index 9e43dd53..4de02092 100644 --- a/lib/sidekiq/testing.rb +++ b/lib/sidekiq/testing.rb @@ -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 diff --git a/test/test_testing.rb b/test/test_testing.rb index 8b078bea..8f0b746f 100644 --- a/test/test_testing.rb +++ b/test/test_testing.rb @@ -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 From 82c43d24470f3ad1d72ed2460dccfc4f306e21f4 Mon Sep 17 00:00:00 2001 From: Pan Thomakos Date: Wed, 2 May 2012 10:59:31 -0700 Subject: [PATCH 2/2] Renamed perform to drain to match Rails 4 API. --- Changes.md | 2 +- lib/sidekiq/testing.rb | 2 +- test/test_testing.rb | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/Changes.md b/Changes.md index 8484a0d7..a5e4f1e2 100644 --- a/Changes.md +++ b/Changes.md @@ -26,7 +26,7 @@ end - Fix delayed extensions not available in workers [#152] -- In test environments add the `#perform` class method to workers. This method +- In test environments add the `#drain` class method to workers. This method executes all previously queued jobs. (panthomakos) 1.1.4 diff --git a/lib/sidekiq/testing.rb b/lib/sidekiq/testing.rb index 4de02092..192c1bac 100644 --- a/lib/sidekiq/testing.rb +++ b/lib/sidekiq/testing.rb @@ -34,7 +34,7 @@ module Sidekiq @pushed ||= [] end - def perform + def drain while job = jobs.shift do new.perform(*job['args']) end diff --git a/test/test_testing.rb b/test/test_testing.rb index 8f0b746f..65c24899 100644 --- a/test/test_testing.rb +++ b/test/test_testing.rb @@ -89,7 +89,7 @@ class TestTesting < MiniTest::Unit::TestCase assert_equal 2, StoredWorker.jobs.size assert_raises PerformError do - StoredWorker.perform + StoredWorker.drain end assert_equal 0, StoredWorker.jobs.size end