Skip to content

Instantly share code, notes, and snippets.

@StefanWallin
Last active March 22, 2020 10:11
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save StefanWallin/5b370283f4da0ddeb03863dbfe19cc8e to your computer and use it in GitHub Desktop.
Save StefanWallin/5b370283f4da0ddeb03863dbfe19cc8e to your computer and use it in GitHub Desktop.
Mocking the Bunny gem and avoiding undetected calls to it

Inspired by how WebMock prevents accidental HTTP & HTTPS calls to other hosts than localhost to avoid depending on external dependencies in your tests I wanted to achieve the same trust in my specs that are generating published events to my (AMQP) RabbitMQ message queue.

This avoids my specs accidentally filling a queue used in development and ensures that I have expects in place to stub and verify the behaviour of talking to my rabbit dependency.

Enjoy, Cheers!

MIT License
Copyright (c) 2015 - present Stefan Wallin
All rights reserved.
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.
RSpec.configure do |config|
# ... Your other RSpec config
# Mock Bunny gem and prevent unstubbed calls to it
config.before(:suite) do
module BunnyMock
class BunnyNotStubbed < StandardError
def to_s
'Call to Bunny was not stubbed. No requests to Bunny accepted'
end
end
end
module Bunny
include BunnyMock
def self.new(_conn = nil, _opts = nil)
raise BunnyMock::BunnyNotStubbed
end
def self.run(_conn = nil, _opts = nil, &_block)
raise BunnyMock::BunnyNotStubbed
end
end
end
end
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment