Module: HttpDecoy::Minitest
- Defined in:
- lib/http_decoy/minitest.rb
Overview
Minitest integration. Same server lifecycle and semantics as HttpDecoy::RSpec (fresh Server per test, WebMock stub scoped to that server, teardown never calls WebMock.reset!) hooked into Minitest's setup/teardown instead of RSpec's before/after.
Pattern A — inline (per test class):
class ChargeTest < Minitest::Test
include HttpDecoy::Minitest
fake_server(:payments) do
post "/charges" do
respond 201, json: { id: "ch_abc" }
end
end
def test_creates_a_charge
MyService.charge(100)
assert_received_request fake_server(:payments), :post, "/charges"
end
end
Pattern B — suite-wide definition (shared with RSpec):
FakeStripe = HttpDecoy.define(:stripe) do
base_url "https://api.stripe.com"
post "/v1/charges" do
respond 200, json: { id: "ch_123" }
end
end
class ChargeTest < Minitest::Test
include FakeStripe.minitest_helpers
def test_charges_the_card
StripeService.charge(500)
assert_received_request fake_server(:stripe), :post, "/v1/charges"
end
end
Defined Under Namespace
Modules: Assertions, ClassMethods
Class Method Summary collapse
Instance Method Summary collapse
-
#fake_server(name) ⇒ Object
Instance-level accessor — returns the live Server for this test.
-
#with_scenario(scenario_name, server_name = nil) ⇒ Object
Run a block with a named scenario active.
Class Method Details
.included(base) ⇒ Object
50 51 52 53 |
# File 'lib/http_decoy/minitest.rb', line 50 def self.included(base) base.extend(ClassMethods) base.include(Assertions) end |
Instance Method Details
#fake_server(name) ⇒ Object
Instance-level accessor — returns the live Server for this test.
108 109 110 |
# File 'lib/http_decoy/minitest.rb', line 108 def fake_server(name) @_http_decoy_servers[name] end |
#with_scenario(scenario_name, server_name = nil) ⇒ Object
Run a block with a named scenario active. server_name defaults to the only server if exactly one is registered.
114 115 116 117 118 119 120 121 122 123 124 125 126 127 |
# File 'lib/http_decoy/minitest.rb', line 114 def with_scenario(scenario_name, server_name = nil, &) name = server_name || begin servers = @_http_decoy_servers || {} raise ArgumentError, "server_name required when multiple fake servers are active" if servers.size > 1 raise ArgumentError, "No fake servers are active" if servers.empty? servers.keys.first end server = @_http_decoy_servers[name] raise ArgumentError, "No fake server named #{name.inspect}" unless server server.with_scenario(scenario_name, &) end |