Skip to content

Instantly share code, notes, and snippets.

@keo
Created February 19, 2012 08:25
Show Gist options
  • Save keo/1862606 to your computer and use it in GitHub Desktop.
Save keo/1862606 to your computer and use it in GitHub Desktop.
Simple mocking for Resque
require 'resque'
module Resque
def self.mock!
puts "*** Mocking Resque" if ENV['VERBOSE']
extend MockExt
@jobs = []
end
module MockExt
def enqueue(klass, *args)
puts "Mock enqueue: jobs.size=#{@jobs.size}, #{klass}, #{args.inspect}" if ENV['VERBOSE']
validate(klass)
add_job('payload' => { 'class' => klass, 'args' => args })
end
def process_queue
while job = @jobs.shift do
process(job)
end
end
def process(data)
klass = data['payload']['class']
puts "Mock perform: #{klass}.perform(*#{data['payload']['args'].inspect})" if ENV['VERBOSE']
klass.perform(*roundtrip(data['payload']['args']))
puts "Mock exit: #{klass}.perform(*#{data['payload']['args'].inspect})" if ENV['VERBOSE']
end
def roundtrip(args)
decode(encode(args))
end
def add_job(data)
@jobs << data
end
end
end
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment