bogus 0.0.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- data/.gitignore +7 -0
- data/.pelusa.yml +1 -0
- data/.travis.yml +6 -0
- data/Gemfile +4 -0
- data/Gemfile.lock +75 -0
- data/Guardfile +15 -0
- data/README.md +272 -0
- data/Rakefile +1 -0
- data/bogus.gemspec +34 -0
- data/features/configuration_options.feature +43 -0
- data/features/contract_tests_mocks.feature +100 -0
- data/features/contract_tests_spies.feature +72 -0
- data/features/contract_tests_stubs.feature +101 -0
- data/features/fake_objects.feature +94 -0
- data/features/return_value_contracts.feature +90 -0
- data/features/safe_mocking.feature +59 -0
- data/features/safe_stubbing.feature +62 -0
- data/features/spies.feature +78 -0
- data/features/step_definitions/rspec_steps.rb +68 -0
- data/features/support/env.rb +1 -0
- data/lib/bogus.rb +35 -0
- data/lib/bogus/adds_recording.rb +11 -0
- data/lib/bogus/configuration.rb +9 -0
- data/lib/bogus/contract_not_fulfilled.rb +24 -0
- data/lib/bogus/converts_name_to_class.rb +31 -0
- data/lib/bogus/copies_classes.rb +44 -0
- data/lib/bogus/creates_fakes.rb +32 -0
- data/lib/bogus/double.rb +10 -0
- data/lib/bogus/fake.rb +33 -0
- data/lib/bogus/fake_registry.rb +13 -0
- data/lib/bogus/injector.rb +64 -0
- data/lib/bogus/interaction.rb +24 -0
- data/lib/bogus/interaction_presenter.rb +29 -0
- data/lib/bogus/interactions_repository.rb +19 -0
- data/lib/bogus/invocation_matcher.rb +27 -0
- data/lib/bogus/method_stringifier.rb +31 -0
- data/lib/bogus/overwrites_classes.rb +9 -0
- data/lib/bogus/proxy_class.rb +22 -0
- data/lib/bogus/public_methods.rb +46 -0
- data/lib/bogus/record_interactions.rb +17 -0
- data/lib/bogus/recording_proxy.rb +18 -0
- data/lib/bogus/records_double_interactions.rb +11 -0
- data/lib/bogus/registers_created_fakes.rb +11 -0
- data/lib/bogus/rr_proxy.rb +5 -0
- data/lib/bogus/rspec.rb +4 -0
- data/lib/bogus/rspec_extensions.rb +32 -0
- data/lib/bogus/takes.rb +8 -0
- data/lib/bogus/verifies_contracts.rb +12 -0
- data/lib/bogus/verifies_stub_definition.rb +37 -0
- data/lib/bogus/version.rb +3 -0
- data/pelusa.sh +3 -0
- data/rbs.sh +3 -0
- data/spec/bogus/adds_recording_spec.rb +33 -0
- data/spec/bogus/configuration_spec.rb +17 -0
- data/spec/bogus/converts_name_to_class_spec.rb +40 -0
- data/spec/bogus/copies_classes_spec.rb +175 -0
- data/spec/bogus/creates_fakes_spec.rb +59 -0
- data/spec/bogus/double_spec.rb +31 -0
- data/spec/bogus/fake_registry_spec.rb +24 -0
- data/spec/bogus/interaction_spec.rb +68 -0
- data/spec/bogus/interactions_repository_spec.rb +50 -0
- data/spec/bogus/invocation_matcher_spec.rb +26 -0
- data/spec/bogus/mocking_dsl_spec.rb +76 -0
- data/spec/bogus/overwrites_classes_spec.rb +26 -0
- data/spec/bogus/proxy_class_spec.rb +95 -0
- data/spec/bogus/record_interactions_spec.rb +27 -0
- data/spec/bogus/records_double_interactions_spec.rb +25 -0
- data/spec/bogus/registers_created_fakes_spec.rb +25 -0
- data/spec/bogus/verifies_contracts_spec.rb +42 -0
- data/spec/bogus/verifies_stub_definition_spec.rb +71 -0
- data/spec/spec_helper.rb +14 -0
- metadata +299 -0
@@ -0,0 +1,68 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe Bogus::Interaction do
|
4
|
+
class SomeError < StandardError; end
|
5
|
+
|
6
|
+
same = [
|
7
|
+
[[:foo, [:bar], "value"], [:foo, [:bar], "value"]],
|
8
|
+
[[:foo, [:bar]], [:foo, [:bar], "value"]],
|
9
|
+
[[:foo, [:bar], "value"], [:foo, [:bar]]],
|
10
|
+
[[:foo, [:bar]], [:foo, [:bar]]]
|
11
|
+
]
|
12
|
+
|
13
|
+
different = [
|
14
|
+
[[:foo, [:bar], "value"], [:foo, [:bar], "value2"]],
|
15
|
+
[[:foo, [:bar], "value"], [:baz, [:bar], "value"]],
|
16
|
+
[[:foo, [:baz], "value"], [:foo, [:bar], "value"]],
|
17
|
+
[[:foo, [:bar]], [:foo, [:baz]]],
|
18
|
+
[[:baz, [:bar]], [:foo, [:bar]]]
|
19
|
+
]
|
20
|
+
|
21
|
+
def create_interaction(interaction)
|
22
|
+
method_name, args, return_value = interaction
|
23
|
+
if return_value
|
24
|
+
Bogus::Interaction.new(method_name, args) { return_value }
|
25
|
+
else
|
26
|
+
Bogus::Interaction.new(method_name, args)
|
27
|
+
end
|
28
|
+
end
|
29
|
+
|
30
|
+
same.each do |first_interaction, second_interaction|
|
31
|
+
it "returns true for #{first_interaction.inspect} and #{second_interaction.inspect}" do
|
32
|
+
first = create_interaction(first_interaction)
|
33
|
+
second = create_interaction(second_interaction)
|
34
|
+
|
35
|
+
first.should == second
|
36
|
+
end
|
37
|
+
end
|
38
|
+
|
39
|
+
different.each do |first_interaction, second_interaction|
|
40
|
+
it "returns false for #{first_interaction.inspect} and #{second_interaction.inspect}" do
|
41
|
+
first = create_interaction(first_interaction)
|
42
|
+
second = create_interaction(second_interaction)
|
43
|
+
|
44
|
+
first.should_not == second
|
45
|
+
end
|
46
|
+
end
|
47
|
+
|
48
|
+
it "differs exceptions from empty return values" do
|
49
|
+
first = Bogus::Interaction.new(:foo, :bar) { raise SomeError }
|
50
|
+
second = Bogus::Interaction.new(:foo, :bar) { nil }
|
51
|
+
|
52
|
+
first.should_not == second
|
53
|
+
end
|
54
|
+
|
55
|
+
it "differs raised exceptions from ones just returned from the block" do
|
56
|
+
first = Bogus::Interaction.new(:foo, :bar) { raise SomeError }
|
57
|
+
second = Bogus::Interaction.new(:foo, :bar) { SomeError }
|
58
|
+
|
59
|
+
first.should_not == second
|
60
|
+
end
|
61
|
+
|
62
|
+
it "considers exceptions of the same type as equal" do
|
63
|
+
first = Bogus::Interaction.new(:foo, :bar) { raise SomeError }
|
64
|
+
second = Bogus::Interaction.new(:foo, :bar) { raise SomeError }
|
65
|
+
|
66
|
+
first.should == second
|
67
|
+
end
|
68
|
+
end
|
@@ -0,0 +1,50 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe Bogus::InteractionsRepository do
|
4
|
+
let(:interactions_repository) { Bogus::InteractionsRepository.new }
|
5
|
+
|
6
|
+
def recorded?(fake_name, method, *args)
|
7
|
+
interactions_repository.recorded?(fake_name, Bogus::Interaction.new(method, args))
|
8
|
+
end
|
9
|
+
|
10
|
+
it "considers the interaction recorded if it was recorded previously" do
|
11
|
+
interactions_repository.record(:foo, :bar, 1, 2, 3)
|
12
|
+
|
13
|
+
recorded?(:foo, :bar, 1, 2, 3).should be_true
|
14
|
+
end
|
15
|
+
|
16
|
+
it "considers the interaction recorded if it returned the same value as passed block" do
|
17
|
+
interactions_repository.record(:foo, :bar) { "a result" }
|
18
|
+
interaction = Bogus::Interaction.new(:bar, []) { "a result" }
|
19
|
+
|
20
|
+
interactions_repository.recorded?(:foo, interaction).should be_true
|
21
|
+
end
|
22
|
+
|
23
|
+
it "does not consider any interactions recorded prior to any recordings" do
|
24
|
+
recorded?(:foo, :bar, 1).should be_false
|
25
|
+
end
|
26
|
+
|
27
|
+
it "does not consider the interaction recorded with a different fake name" do
|
28
|
+
interactions_repository.record(:baz, :bar, 1)
|
29
|
+
|
30
|
+
recorded?(:foo, :bar, 1).should be_false
|
31
|
+
end
|
32
|
+
|
33
|
+
it "does not consider the interaction recorded with a different method name" do
|
34
|
+
interactions_repository.record(:foo, :baz, 1)
|
35
|
+
|
36
|
+
recorded?(:foo, :bar, 1).should be_false
|
37
|
+
end
|
38
|
+
|
39
|
+
it "does not consider the interaction recorded with different method arguments" do
|
40
|
+
interactions_repository.record(:foo, :bar, 1, 2)
|
41
|
+
|
42
|
+
recorded?(:foo, :bar, 1).should be_false
|
43
|
+
end
|
44
|
+
|
45
|
+
it "returns a list of interactions for given fake" do
|
46
|
+
interactions_repository.record(:foo, :bar, 1, 2)
|
47
|
+
|
48
|
+
interactions_repository.for_fake(:foo).should == [Bogus::Interaction.new(:bar, [1, 2])]
|
49
|
+
end
|
50
|
+
end
|
@@ -0,0 +1,26 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe Bogus::InvocationMatcher do
|
4
|
+
let(:object) { stub }
|
5
|
+
let(:method) { nil }
|
6
|
+
let(:records_double_interactions) { stub }
|
7
|
+
let(:verifies_stub_definition) { stub }
|
8
|
+
|
9
|
+
let(:invocation_matcher) { isolate(Bogus::InvocationMatcher) }
|
10
|
+
|
11
|
+
before do
|
12
|
+
stub(verifies_stub_definition).verify!
|
13
|
+
stub(records_double_interactions).record
|
14
|
+
|
15
|
+
invocation_matcher.the_method(:foo, :bar)
|
16
|
+
invocation_matcher.matches?(object)
|
17
|
+
end
|
18
|
+
|
19
|
+
it "verifies stub definition" do
|
20
|
+
verifies_stub_definition.should have_received.verify!(object, :the_method, [:foo, :bar])
|
21
|
+
end
|
22
|
+
|
23
|
+
it "records double interacions" do
|
24
|
+
records_double_interactions.should have_received.record(object, :the_method, [:foo, :bar])
|
25
|
+
end
|
26
|
+
end
|
@@ -0,0 +1,76 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe Bogus::MockingDSL do
|
4
|
+
class ExampleFoo
|
5
|
+
def foo(bar)
|
6
|
+
end
|
7
|
+
end
|
8
|
+
|
9
|
+
class Stubber
|
10
|
+
extend Bogus::MockingDSL
|
11
|
+
end
|
12
|
+
|
13
|
+
describe "#stub" do
|
14
|
+
it "allows stubbing the existing methods" do
|
15
|
+
baz = ExampleFoo.new
|
16
|
+
|
17
|
+
Stubber.stub(baz).foo("bar") { :return_value }
|
18
|
+
|
19
|
+
baz.foo("bar").should == :return_value
|
20
|
+
end
|
21
|
+
|
22
|
+
it "does not allow stubbing non-existent methods" do
|
23
|
+
baz = ExampleFoo.new
|
24
|
+
expect do
|
25
|
+
Stubber.stub(baz).does_not_exist("bar") { :return_value }
|
26
|
+
end.to raise_error(NameError)
|
27
|
+
end
|
28
|
+
end
|
29
|
+
|
30
|
+
describe "#have_received" do
|
31
|
+
context "with a fake object" do
|
32
|
+
let(:the_fake) { Bogus.fake_for(:example_foo) }
|
33
|
+
|
34
|
+
it "allows verifying that fakes have correct interfaces" do
|
35
|
+
the_fake.foo("test")
|
36
|
+
|
37
|
+
the_fake.should Stubber.have_received.foo("test")
|
38
|
+
end
|
39
|
+
|
40
|
+
it "does not allow verifying on non-existent methods" do
|
41
|
+
expect {
|
42
|
+
the_fake.should Stubber.have_received.bar("test")
|
43
|
+
}.to raise_error(NameError)
|
44
|
+
end
|
45
|
+
|
46
|
+
it "does not allow verifying on methods with a wrong argument count" do
|
47
|
+
expect {
|
48
|
+
the_fake.should Stubber.have_received.foo("test", "test 2")
|
49
|
+
}.to raise_error(ArgumentError)
|
50
|
+
end
|
51
|
+
end
|
52
|
+
|
53
|
+
it "can be used with plain old Ruby objects" do
|
54
|
+
object = ExampleFoo.new
|
55
|
+
stub(object).foo
|
56
|
+
|
57
|
+
object.foo('test')
|
58
|
+
|
59
|
+
object.should Stubber.have_received.foo("test")
|
60
|
+
end
|
61
|
+
end
|
62
|
+
|
63
|
+
class Mocker
|
64
|
+
extend Bogus::MockingDSL
|
65
|
+
end
|
66
|
+
|
67
|
+
describe "#mock" do
|
68
|
+
it "allows mocking the existing methods" do
|
69
|
+
baz = ExampleFoo.new
|
70
|
+
|
71
|
+
Mocker.mock(baz).foo("bar") { :return_value }
|
72
|
+
|
73
|
+
baz.foo("bar").should == :return_value
|
74
|
+
end
|
75
|
+
end
|
76
|
+
end
|
@@ -0,0 +1,26 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe Bogus::OverwritesClasses do
|
4
|
+
module SampleOuterModule
|
5
|
+
module SampleModule
|
6
|
+
class SampleClass
|
7
|
+
end
|
8
|
+
end
|
9
|
+
end
|
10
|
+
|
11
|
+
let(:new_class) { Class.new }
|
12
|
+
let(:overwrites_classes) { Bogus::OverwritesClasses.new }
|
13
|
+
|
14
|
+
it "overwrites nested classes" do
|
15
|
+
overwrites_classes.overwrite(SampleOuterModule::SampleModule::SampleClass, new_class)
|
16
|
+
|
17
|
+
SampleOuterModule::SampleModule::SampleClass.should equal(new_class)
|
18
|
+
end
|
19
|
+
|
20
|
+
it "overwrites top level classes" do
|
21
|
+
overwrites_classes.overwrite(SampleOuterModule, new_class)
|
22
|
+
|
23
|
+
SampleOuterModule.should equal(new_class)
|
24
|
+
end
|
25
|
+
end
|
26
|
+
|
@@ -0,0 +1,95 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe Bogus::ProxyClass do
|
4
|
+
module SampleModule
|
5
|
+
class GrandLibrary
|
6
|
+
def checkout(book, user)
|
7
|
+
:checkouted
|
8
|
+
end
|
9
|
+
|
10
|
+
def self.find_by_address(address)
|
11
|
+
:the_library
|
12
|
+
end
|
13
|
+
|
14
|
+
def self.find_by_isbn(isbn)
|
15
|
+
raise StandardError
|
16
|
+
end
|
17
|
+
end
|
18
|
+
end
|
19
|
+
|
20
|
+
let(:proxy_class) { Bogus::ProxyClass.new(:fake_name, SampleModule::GrandLibrary, create_recording_proxy) }
|
21
|
+
|
22
|
+
let(:create_recording_proxy) do
|
23
|
+
lambda {|instance, fake_name| Bogus::RecordingProxy.new(instance, fake_name, interactions_repository) }
|
24
|
+
end
|
25
|
+
|
26
|
+
let(:interactions_repository) { FakeRepository.new }
|
27
|
+
|
28
|
+
it "returns the proxy" do
|
29
|
+
proxy_class.new.checkout("Moby Dick", "Bob").should == :checkouted
|
30
|
+
end
|
31
|
+
|
32
|
+
it "records interactions with created objects" do
|
33
|
+
proxy_class.new.checkout("Moby Dick", "Bob")
|
34
|
+
|
35
|
+
interactions_repository.should have_recorded(:fake_name, :checkout, "Moby Dick", "Bob")
|
36
|
+
end
|
37
|
+
|
38
|
+
it "responds to every method that the original class responds to" do
|
39
|
+
proxy_class.should respond_to(:find_by_address)
|
40
|
+
end
|
41
|
+
|
42
|
+
it "delegates interactions with the proxy class to wrapped class" do
|
43
|
+
proxy_class.find_by_address("some address").should == :the_library
|
44
|
+
end
|
45
|
+
|
46
|
+
it "records interactions with the proxy class" do
|
47
|
+
proxy_class.find_by_address("some address")
|
48
|
+
|
49
|
+
interactions_repository.should have_recorded(:fake_name, :find_by_address, "some address")
|
50
|
+
end
|
51
|
+
|
52
|
+
it "records return values" do
|
53
|
+
proxy_class.find_by_address("some address")
|
54
|
+
|
55
|
+
interactions_repository.return_value(:fake_name, :find_by_address, "some address").should == :the_library
|
56
|
+
end
|
57
|
+
|
58
|
+
it "re-raises exceptions" do
|
59
|
+
expect {
|
60
|
+
proxy_class.find_by_isbn("some isbn")
|
61
|
+
}.to raise_error(StandardError)
|
62
|
+
end
|
63
|
+
|
64
|
+
it "records raised exceptions" do
|
65
|
+
proxy_class.find_by_isbn("some isbn") rescue nil
|
66
|
+
|
67
|
+
expect {
|
68
|
+
interactions_repository.return_value(:fake_name, :find_by_isbn, "some isbn")
|
69
|
+
}.to raise_error(StandardError)
|
70
|
+
end
|
71
|
+
|
72
|
+
class FakeRepository
|
73
|
+
def initialize
|
74
|
+
@recordings = []
|
75
|
+
end
|
76
|
+
|
77
|
+
def record(fake_name, method, *args, &block)
|
78
|
+
@recordings << [fake_name, method, args, block]
|
79
|
+
end
|
80
|
+
|
81
|
+
def has_recorded?(fake_name, method, *args)
|
82
|
+
!!find(fake_name, method, *args)
|
83
|
+
end
|
84
|
+
|
85
|
+
def return_value(fake_name, method, *args)
|
86
|
+
find(fake_name, method, *args).last.call
|
87
|
+
end
|
88
|
+
|
89
|
+
def find(fake_name, method, *args)
|
90
|
+
@recordings.find do |f, m, a, b|
|
91
|
+
[f, m, a] == [fake_name, method, args]
|
92
|
+
end
|
93
|
+
end
|
94
|
+
end
|
95
|
+
end
|
@@ -0,0 +1,27 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe Bogus::RecordInteractions do
|
4
|
+
|
5
|
+
class SampleRecordsInteractions
|
6
|
+
include Bogus::RecordInteractions
|
7
|
+
end
|
8
|
+
|
9
|
+
let(:sample) { SampleRecordsInteractions.new }
|
10
|
+
let!(:rr) { Bogus::RRProxy }
|
11
|
+
|
12
|
+
it "allows verifying that interactions happened" do
|
13
|
+
sample.__record__(:foo, 1, 2, 3)
|
14
|
+
|
15
|
+
sample.__inner_object__.should have_received.foo(1, 2, 3)
|
16
|
+
end
|
17
|
+
|
18
|
+
it "allows verifying that interactions didn't happen" do
|
19
|
+
sample.__record__(:bar)
|
20
|
+
|
21
|
+
sample.__inner_object__.should_not have_received.foo
|
22
|
+
end
|
23
|
+
|
24
|
+
it "returns self from record" do
|
25
|
+
sample.__record__(:foo).should == sample
|
26
|
+
end
|
27
|
+
end
|
@@ -0,0 +1,25 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe Bogus::RecordsDoubleInteractions do
|
4
|
+
let(:fake_registry) { stub }
|
5
|
+
let(:doubled_interactions) { stub }
|
6
|
+
let(:object) { Object.new }
|
7
|
+
|
8
|
+
let(:records_double_interactions) { isolate(Bogus::RecordsDoubleInteractions) }
|
9
|
+
|
10
|
+
it "records the call in double interaction repository" do
|
11
|
+
stub(fake_registry).name(object) { :object_name }
|
12
|
+
stub(doubled_interactions).record
|
13
|
+
|
14
|
+
records_double_interactions.record(object, :method_name, [:foo, 1])
|
15
|
+
|
16
|
+
doubled_interactions.should have_received.record(:object_name, :method_name, :foo, 1)
|
17
|
+
end
|
18
|
+
|
19
|
+
it "does not record the interaction if object is not a fake" do
|
20
|
+
stub(fake_registry).name(object) { nil }
|
21
|
+
dont_allow(doubled_interactions).record
|
22
|
+
|
23
|
+
records_double_interactions.record(object, :method_name, [:foo, 1])
|
24
|
+
end
|
25
|
+
end
|
@@ -0,0 +1,25 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe Bogus::RegistersCreatedFakes do
|
4
|
+
let(:fake_registry) { stub }
|
5
|
+
let(:creates_fakes) { stub }
|
6
|
+
|
7
|
+
let(:registers_created_fakes) { isolate(Bogus::RegistersCreatedFakes) }
|
8
|
+
|
9
|
+
before do
|
10
|
+
stub(fake_registry).store
|
11
|
+
stub(creates_fakes).create { :the_fake }
|
12
|
+
end
|
13
|
+
|
14
|
+
it "registers the fakes created by creates_fakes" do
|
15
|
+
registers_created_fakes.create(:foo, as: :instance) { Object }
|
16
|
+
|
17
|
+
fake_registry.should have_received.store(:foo, :the_fake)
|
18
|
+
end
|
19
|
+
|
20
|
+
it "returns the created fake" do
|
21
|
+
fake = registers_created_fakes.create(:foo, as: :instance) { Object }
|
22
|
+
|
23
|
+
fake.should == :the_fake
|
24
|
+
end
|
25
|
+
end
|
@@ -0,0 +1,42 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe Bogus::VerifiesContracts do
|
4
|
+
let(:real_interactions) { stub }
|
5
|
+
let(:doubled_interactions) { stub }
|
6
|
+
let(:verifies_contracts) { isolate(Bogus::VerifiesContracts) }
|
7
|
+
|
8
|
+
let(:matched_interaction) { interaction("matched") }
|
9
|
+
|
10
|
+
it "fails unmatched calls" do
|
11
|
+
first_interaction = interaction("first")
|
12
|
+
second_interaction = interaction("second")
|
13
|
+
|
14
|
+
stub(doubled_interactions).for_fake(:fake_name){[first_interaction, matched_interaction, second_interaction]}
|
15
|
+
|
16
|
+
stub(real_interactions).recorded?(:fake_name, first_interaction) { false }
|
17
|
+
stub(real_interactions).recorded?(:fake_name, second_interaction) { false }
|
18
|
+
stub(real_interactions).recorded?(:fake_name, matched_interaction) { true }
|
19
|
+
|
20
|
+
expect_verify_to_raise_error_with_interactions(:fake_name, [first_interaction, second_interaction])
|
21
|
+
end
|
22
|
+
|
23
|
+
it "passes with all calls matched" do
|
24
|
+
stub(doubled_interactions).for_fake(:fake_name) { [matched_interaction] }
|
25
|
+
stub(real_interactions).recorded?(:fake_name, matched_interaction) { true }
|
26
|
+
|
27
|
+
expect {
|
28
|
+
verifies_contracts.verify(:fake_name)
|
29
|
+
}.not_to raise_error
|
30
|
+
end
|
31
|
+
|
32
|
+
def expect_verify_to_raise_error_with_interactions(name, interactions)
|
33
|
+
verifies_contracts.verify(name)
|
34
|
+
fail
|
35
|
+
rescue Bogus::ContractNotFulfilled => contract_error
|
36
|
+
contract_error.interactions.should == { name => interactions }
|
37
|
+
end
|
38
|
+
|
39
|
+
def interaction(method)
|
40
|
+
Bogus::Interaction.new(method, [:foo, :bar]) { "return value" }
|
41
|
+
end
|
42
|
+
end
|