mperham/sidekiq — pull request #1943 by aprescott (2014-09-10 22:12:55+00:00)
Title: Rely on perform_one for inline testing

Inline testing currently overrides `perform_async` to simply directly call

```ruby
SomeJob.new.perform(*args)
```

after round-tripping `*args` through JSON serialization/deserialization and setting up a fake `worker.jid` value.

After #1938, most (all?) other places now use `execute_job` instead, which indirectly calls `SomeJob.new.perform(*args)`.

`testing.rb` defines a `perform_one` which is one of the places where the new `execute_job` method is used. It also takes care of setting `worker.jid`.

This change replaces the inline testing mode from a direct `SomeJob.new.perform` method call to instead:

1. Place a job on the faked array queue, at the front of the list.
2. Immediately call `perform_one`, to take the job off the front of the list.

This reduces the duplication around what it means to execute a job, makes the usage of `execute_job` consistent across applications, and improves `inline!` testing's mirroring of how the job would actually be run — by "placing" it on a queue and then "pulling" the job off the queue straight away.

As a bonus, any third-party gems which provide an implementation of `execute_job` (such as in #1938) can test that their `execute_job` is working by using `perform_async` with `inline!` testing, instead of manually calling `perform_one` in the `fake!` testing mode or disabling Sidekiq testing entirely.