diff --git a/coverband.gemspec b/coverband.gemspec index 9356afa0..de9f9ac7 100644 --- a/coverband.gemspec +++ b/coverband.gemspec @@ -32,6 +32,7 @@ Gem::Specification.new do |spec| spec.add_development_dependency 'rack' spec.add_development_dependency 'rack-test' spec.add_development_dependency 'rake' + spec.add_development_dependency 'resque' # TODO: used for benchmarking and tests I think we have other better benchmarking # perhaps time to drop this and refactor. diff --git a/lib/coverband.rb b/lib/coverband.rb index e1b4d07b..70d7cc11 100644 --- a/lib/coverband.rb +++ b/lib/coverband.rb @@ -25,6 +25,7 @@ require 'coverband/reporters/web' require 'coverband/integrations/middleware' require 'coverband/integrations/background' +require 'coverband/integrations/resque' if defined? Resque module Coverband CONFIG_FILE = './config/coverband.rb' diff --git a/lib/coverband/integrations/resque.rb b/lib/coverband/integrations/resque.rb new file mode 100644 index 00000000..3fd8fdd3 --- /dev/null +++ b/lib/coverband/integrations/resque.rb @@ -0,0 +1,18 @@ +# frozen_string_literal: true + +Resque.after_fork do |job| + Coverband.start +end + +module Coverband + module ResqueWorker + def perform + super + ensure + Coverband::Collectors::Coverage.instance.report_coverage(true) + end + end +end + +Resque::Job.prepend(Coverband::ResqueWorker) + diff --git a/test/test_helper.rb b/test/test_helper.rb index 59a82104..bca6fcc2 100644 --- a/test/test_helper.rb +++ b/test/test_helper.rb @@ -14,6 +14,7 @@ require 'ostruct' require 'json' require 'redis' +require 'resque' require 'pry-byebug' $VERBOSE = original_verbosity diff --git a/test/unit/resque_worker_test.rb b/test/unit/resque_worker_test.rb new file mode 100644 index 00000000..8ab30340 --- /dev/null +++ b/test/unit/resque_worker_test.rb @@ -0,0 +1,25 @@ +# frozen_string_literal: true + +require File.expand_path('../test_helper', File.dirname(__FILE__)) + +class ResqueWorkerTest < Minitest::Test + def enqueue_and_run_job + Resque.enqueue(TestResqueJob) + ENV['QUEUE'] ='resque_coverband' + Resque::Worker.new.work_one_job + end + + test 'resque job coverage' do + resque_job_file = File.expand_path('./test_resque_job.rb', File.dirname(__FILE__)) + require resque_job_file + + #report after loading the file in parent process + Coverband::Collectors::Coverage.instance.report_coverage(true) + + enqueue_and_run_job + + expected = [1, 1, nil, 1, 1, nil, nil] + assert_equal expected, Coverband.configuration.store.coverage[resque_job_file]['data'] + end +end + diff --git a/test/unit/test_resque_job.rb b/test/unit/test_resque_job.rb new file mode 100644 index 00000000..1d34eff1 --- /dev/null +++ b/test/unit/test_resque_job.rb @@ -0,0 +1,7 @@ +class TestResqueJob + @queue = :resque_coverband + + def self.perform + puts "perform" + end +end