How to configure puffing-billy gem with Knapsack Pro Queue Mode?
If you use puffing-billy gem you may notice puffing-billy may crash. It happen due to the way how knapsack_pro
in Queue Mode uses RSpec::Core::Runner
(see).
Here is a patch for puffing-billy to make it work in knapsack_pro
Queue Mode:
# rails_helper.rb or spec_helper.rb
# A patch to `puffing-billy`'s proxy so that it doesn't try to stop
# eventmachine's reactor if it's not running.
module BillyProxyPatch
def stop
return unless EM.reactor_running?
super
end
end
Billy::Proxy.prepend(BillyProxyPatch)
# A patch to `puffing-billy` to start EM if it has been stopped
Billy.module_eval do
def self.proxy
if @billy_proxy.nil? || !(EventMachine.reactor_running? && EventMachine.reactor_thread.alive?)
proxy = Billy::Proxy.new
proxy.start
@billy_proxy = proxy
else
@billy_proxy
end
end
end
if ENV["KNAPSACK_PRO_TEST_SUITE_TOKEN_RSPEC"]
KnapsackPro::Hooks::Queue.before_queue do
# executes before Queue Mode starts work
Billy.proxy.start
end
KnapsackPro::Hooks::Queue.after_queue do
# executes after Queue Mode finishes work
Billy.proxy.stop
end
end