bogus 0.1.4 → 0.1.5
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.
- checksums.yaml +7 -0
- data/.gitignore +1 -0
- data/.travis.yml +1 -1
- data/Guardfile +1 -3
- data/Guardfile.cucumber +0 -2
- data/README.md +1 -1
- data/bogus.gemspec +3 -1
- data/features/changelog.md +11 -0
- data/features/configuration/fake_ar_attributes.feature +2 -2
- data/features/contract_tests/contract_tests_mocks.feature +5 -5
- data/features/contract_tests/contract_tests_spies.feature +1 -1
- data/features/contract_tests/contract_tests_stubs.feature +6 -6
- data/features/contract_tests/custom_overwritten_class.feature +4 -4
- data/features/contract_tests/return_value_contracts.feature +2 -2
- data/features/fakes/anonymous_doubles.feature +5 -5
- data/features/fakes/duck_types.feature +9 -9
- data/features/fakes/fake_objects.feature +31 -8
- data/features/fakes/global_fake_configuration.feature +5 -5
- data/features/fakes/replacing_classes.feature +5 -5
- data/features/readme.md +5 -5
- data/features/safe_stubbing/argument_matchers.feature +23 -10
- data/features/safe_stubbing/safe_mocking.feature +1 -1
- data/features/safe_stubbing/safe_stubbing.feature +1 -1
- data/features/safe_stubbing/spies.feature +7 -7
- data/lib/bogus.rb +1 -0
- data/lib/bogus/core_ext.rb +22 -0
- data/lib/bogus/fakes/fake.rb +2 -1
- data/lib/bogus/fakes/method_stringifier.rb +1 -0
- data/lib/bogus/mocking_dsl.rb +4 -0
- data/lib/bogus/stubbing/has_overwritten_methods.rb +28 -10
- data/lib/bogus/stubbing/have_received_matcher.rb +4 -2
- data/lib/bogus/stubbing/matchers/any_args.rb +9 -0
- data/lib/bogus/stubbing/matchers/matches_argument.rb +11 -0
- data/lib/bogus/stubbing/{any_args.rb → matchers/with_arguments.rb} +0 -6
- data/lib/bogus/stubbing/overwrites_methods.rb +6 -1
- data/lib/bogus/stubbing/undefined_return_value.rb +4 -0
- data/lib/bogus/support.rb +11 -0
- data/lib/bogus/version.rb +1 -1
- data/spec/bogus/clean_ruby_spec.rb +1 -1
- data/spec/bogus/configuration_spec.rb +2 -2
- data/spec/bogus/contracts/adds_contract_verification_spec.rb +10 -10
- data/spec/bogus/contracts/adds_recording_spec.rb +4 -4
- data/spec/bogus/contracts/interactions_repository_spec.rb +15 -15
- data/spec/bogus/contracts/proxy_class_spec.rb +7 -7
- data/spec/bogus/contracts/records_double_interactions_spec.rb +1 -1
- data/spec/bogus/contracts/verifies_contracts_spec.rb +3 -3
- data/spec/bogus/fakes/base_class_identifier_spec.rb +1 -1
- data/spec/bogus/fakes/class_methods_spec.rb +4 -5
- data/spec/bogus/fakes/converts_name_to_class_spec.rb +3 -3
- data/spec/bogus/fakes/copies_classes_spec.rb +20 -16
- data/spec/bogus/fakes/creates_fakes_spec.rb +6 -6
- data/spec/bogus/fakes/creates_fakes_with_stubbed_methods_spec.rb +16 -15
- data/spec/bogus/fakes/fake_ar_attributes_spec.rb +3 -3
- data/spec/bogus/fakes/fake_configuration_spec.rb +16 -16
- data/spec/bogus/fakes/fake_registry_spec.rb +2 -2
- data/spec/bogus/fakes/fake_spec.rb +1 -1
- data/spec/bogus/fakes/fakes_classes_spec.rb +4 -4
- data/spec/bogus/fakes/faking_factories_spec.rb +4 -4
- data/spec/bogus/fakes/frozen_fakes_spec.rb +4 -4
- data/spec/bogus/fakes/instance_methods_spec.rb +5 -5
- data/spec/bogus/fakes/makes_ducks_spec.rb +3 -3
- data/spec/bogus/fakes/makes_substitute_methods_spec.rb +1 -1
- data/spec/bogus/fakes/overwriten_classes_spec.rb +3 -3
- data/spec/bogus/fakes/overwrites_classes_spec.rb +2 -2
- data/spec/bogus/fakes/registers_created_fakes_spec.rb +3 -3
- data/spec/bogus/fakes/resets_overwritten_classes_spec.rb +3 -3
- data/spec/bogus/fakes/stubbing_new_method_on_fake_class_spec.rb +25 -0
- data/spec/bogus/mocking_dsl_spec.rb +36 -36
- data/spec/bogus/ruby_2_1_support_spec.rb +38 -0
- data/spec/bogus/ruby_2_support_spec.rb +14 -64
- data/spec/bogus/stubbing/anything_spec.rb +5 -5
- data/spec/bogus/stubbing/double_spec.rb +2 -2
- data/spec/bogus/stubbing/have_received_matcher_spec.rb +11 -6
- data/spec/bogus/stubbing/interaction_spec.rb +7 -7
- data/spec/bogus/stubbing/multi_stubber_spec.rb +2 -2
- data/spec/bogus/stubbing/overwrites_methods_spec.rb +8 -8
- data/spec/bogus/stubbing/record_interactions_spec.rb +3 -3
- data/spec/bogus/stubbing/shadow_spec.rb +28 -28
- data/spec/bogus/stubbing/stubbing_existing_methods_on_fakes_spec.rb +50 -0
- data/spec/bogus/stubbing/tracks_existence_of_test_doubles_spec.rb +2 -2
- data/spec/bogus/stubbing/undefined_return_value_spec.rb +2 -2
- data/spec/spec_helper.rb +6 -1
- data/spec/support/shared_examples_for_keyword_arguments.rb +63 -0
- metadata +160 -160
- data/Gemfile.lock +0 -146
@@ -14,13 +14,13 @@ describe Bogus::OverwritesClasses do
|
|
14
14
|
it "overwrites nested classes" do
|
15
15
|
overwrites_classes.overwrite('SampleOuterModule::SampleModule::SampleClass', new_class)
|
16
16
|
|
17
|
-
SampleOuterModule::SampleModule::SampleClass.
|
17
|
+
expect(SampleOuterModule::SampleModule::SampleClass).to equal(new_class)
|
18
18
|
end
|
19
19
|
|
20
20
|
it "overwrites top level classes" do
|
21
21
|
overwrites_classes.overwrite('SampleOuterModule', new_class)
|
22
22
|
|
23
|
-
SampleOuterModule.
|
23
|
+
expect(SampleOuterModule).to equal(new_class)
|
24
24
|
end
|
25
25
|
end
|
26
26
|
|
@@ -16,18 +16,18 @@ describe Bogus::RegistersCreatedFakes do
|
|
16
16
|
it "registers the fakes created by creates_fakes" do
|
17
17
|
registers_created_fakes.create(:foo, as: :instance) { Object }
|
18
18
|
|
19
|
-
fake_registry.
|
19
|
+
expect(fake_registry).to have_received.store(:foo, :the_fake)
|
20
20
|
end
|
21
21
|
|
22
22
|
it "tracks the created fakes for purposes of mock expectations" do
|
23
23
|
registers_created_fakes.create(:foo, as: :instance) { Object }
|
24
24
|
|
25
|
-
double_tracker.
|
25
|
+
expect(double_tracker).to have_received.track(:the_fake)
|
26
26
|
end
|
27
27
|
|
28
28
|
it "returns the created fake" do
|
29
29
|
fake = registers_created_fakes.create(:foo, as: :instance) { Object }
|
30
30
|
|
31
|
-
fake.
|
31
|
+
expect(fake).to eq :the_fake
|
32
32
|
end
|
33
33
|
end
|
@@ -16,11 +16,11 @@ describe Bogus::ResetsOverwrittenClasses do
|
|
16
16
|
end
|
17
17
|
|
18
18
|
it "overwrites back all of the overwritten classes" do
|
19
|
-
overwrites_classes.
|
20
|
-
overwrites_classes.
|
19
|
+
expect(overwrites_classes).to have_received.overwrite('Foo', :foo)
|
20
|
+
expect(overwrites_classes).to have_received.overwrite('Bar', :bar)
|
21
21
|
end
|
22
22
|
|
23
23
|
it "clears the overwritten classes" do
|
24
|
-
overwritten_classes.
|
24
|
+
expect(overwritten_classes).to have_received.clear
|
25
25
|
end
|
26
26
|
end
|
@@ -0,0 +1,25 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe "Stubbing .new on fake class" do
|
4
|
+
class ExampleForStubbingNew
|
5
|
+
end
|
6
|
+
|
7
|
+
include Bogus::MockingDSL
|
8
|
+
|
9
|
+
it "allows stubbing new on a class" do
|
10
|
+
fake_class = fake(ExampleForStubbingNew, as: :class)
|
11
|
+
stub(fake_class).new { :stubbed_value }
|
12
|
+
|
13
|
+
instance = fake_class.new
|
14
|
+
|
15
|
+
expect(instance).to eq(:stubbed_value)
|
16
|
+
end
|
17
|
+
|
18
|
+
it "returns fake instances when nothing is stubbed" do
|
19
|
+
fake_class = fake(ExampleForStubbingNew, as: :class)
|
20
|
+
|
21
|
+
instance = fake_class.new
|
22
|
+
|
23
|
+
expect(instance).to be_an_instance_of(fake_class)
|
24
|
+
end
|
25
|
+
end
|
@@ -30,25 +30,25 @@ describe Bogus::MockingDSL do
|
|
30
30
|
it "allows stubbing the existing methods" do
|
31
31
|
Stubber.stub(baz).foo("bar") { :return_value }
|
32
32
|
|
33
|
-
baz.foo("bar").
|
33
|
+
expect(baz.foo("bar")).to eq :return_value
|
34
34
|
end
|
35
35
|
|
36
36
|
it "can stub method with any parameters" do
|
37
37
|
Stubber.stub(baz).foo(Stubber.any_args) { :default_value }
|
38
38
|
Stubber.stub(baz).foo("bar") { :foo_value }
|
39
39
|
|
40
|
-
baz.foo("a").
|
41
|
-
baz.foo("b").
|
42
|
-
baz.foo("bar").
|
40
|
+
expect(baz.foo("a")).to eq :default_value
|
41
|
+
expect(baz.foo("b")).to eq :default_value
|
42
|
+
expect(baz.foo("bar")).to eq :foo_value
|
43
43
|
end
|
44
44
|
|
45
45
|
it "can stub method with some wildcard parameters" do
|
46
46
|
Stubber.stub(baz).hello(Stubber.any_args) { :default_value }
|
47
47
|
Stubber.stub(baz).hello("welcome", Stubber.anything) { :greeting_value }
|
48
48
|
|
49
|
-
baz.hello("hello", "adam").
|
50
|
-
baz.hello("welcome", "adam").
|
51
|
-
baz.hello("welcome", "rudy").
|
49
|
+
expect(baz.hello("hello", "adam")).to eq :default_value
|
50
|
+
expect(baz.hello("welcome", "adam")).to eq :greeting_value
|
51
|
+
expect(baz.hello("welcome", "rudy")).to eq :greeting_value
|
52
52
|
end
|
53
53
|
|
54
54
|
it "does not allow stubbing non-existent methods" do
|
@@ -63,7 +63,7 @@ describe Bogus::MockingDSL do
|
|
63
63
|
|
64
64
|
Bogus.after_each_test
|
65
65
|
|
66
|
-
ExampleFoo.bar("John").
|
66
|
+
expect(ExampleFoo.bar("John")).to eq "Hello John"
|
67
67
|
end
|
68
68
|
end
|
69
69
|
|
@@ -74,25 +74,25 @@ describe Bogus::MockingDSL do
|
|
74
74
|
it "allows verifying that fakes have correct interfaces" do
|
75
75
|
the_fake.foo("test")
|
76
76
|
|
77
|
-
the_fake.
|
77
|
+
expect(the_fake).to Stubber.have_received.foo("test")
|
78
78
|
end
|
79
79
|
|
80
80
|
it "does not allow verifying on non-existent methods" do
|
81
81
|
expect {
|
82
|
-
the_fake.
|
82
|
+
expect(the_fake).to Stubber.have_received.bar("test")
|
83
83
|
}.to raise_error(NameError)
|
84
84
|
end
|
85
85
|
|
86
86
|
it "does not allow verifying on methods with a wrong argument count" do
|
87
87
|
expect {
|
88
|
-
the_fake.
|
88
|
+
expect(the_fake).to Stubber.have_received.foo("test", "test 2")
|
89
89
|
}.to raise_error(ArgumentError)
|
90
90
|
end
|
91
91
|
|
92
92
|
it "allows spying on methods with optional parameters" do
|
93
93
|
the_fake.with_optional_args(123)
|
94
94
|
|
95
|
-
the_fake.
|
95
|
+
expect(the_fake).to Stubber.have_received.with_optional_args(123)
|
96
96
|
end
|
97
97
|
end
|
98
98
|
|
@@ -102,16 +102,16 @@ describe Bogus::MockingDSL do
|
|
102
102
|
|
103
103
|
object.foo('test')
|
104
104
|
|
105
|
-
object.
|
105
|
+
expect(object).to Stubber.have_received.foo("test")
|
106
106
|
end
|
107
107
|
|
108
108
|
it "allows spying on methods with optional parameters" do
|
109
109
|
object = ExampleFoo.new
|
110
110
|
Stubber.stub(object).with_optional_args(123) { 999 }
|
111
111
|
|
112
|
-
object.with_optional_args(123).
|
112
|
+
expect(object.with_optional_args(123)).to eq 999
|
113
113
|
|
114
|
-
object.
|
114
|
+
expect(object).to Stubber.have_received.with_optional_args(123)
|
115
115
|
end
|
116
116
|
|
117
117
|
class ClassWithMatches
|
@@ -124,7 +124,7 @@ describe Bogus::MockingDSL do
|
|
124
124
|
|
125
125
|
fake.matches?("foo")
|
126
126
|
|
127
|
-
fake.
|
127
|
+
expect(fake).to Bogus.have_received.matches?("foo")
|
128
128
|
end
|
129
129
|
|
130
130
|
class PassesSelfToCollaborator
|
@@ -141,7 +141,7 @@ describe Bogus::MockingDSL do
|
|
141
141
|
|
142
142
|
object.hello(fake)
|
143
143
|
|
144
|
-
fake.
|
144
|
+
expect(fake).to Bogus.have_received.foo(object)
|
145
145
|
end
|
146
146
|
end
|
147
147
|
|
@@ -157,7 +157,7 @@ describe Bogus::MockingDSL do
|
|
157
157
|
it "allows mocking on methods with optional parameters" do
|
158
158
|
Mocker.mock(baz).with_optional_args(1) { :return }
|
159
159
|
|
160
|
-
baz.with_optional_args(1).
|
160
|
+
expect(baz.with_optional_args(1)).to eq :return
|
161
161
|
|
162
162
|
expect { Bogus.after_each_test }.not_to raise_error
|
163
163
|
end
|
@@ -165,7 +165,7 @@ describe Bogus::MockingDSL do
|
|
165
165
|
it "allows mocking with anything" do
|
166
166
|
Mocker.mock(baz).hello(1, Bogus::Anything) { :return }
|
167
167
|
|
168
|
-
baz.hello(1, 2).
|
168
|
+
expect(baz.hello(1, 2)).to eq :return
|
169
169
|
|
170
170
|
expect { Bogus.after_each_test }.not_to raise_error
|
171
171
|
end
|
@@ -173,7 +173,7 @@ describe Bogus::MockingDSL do
|
|
173
173
|
it "allows mocking the existing methods" do
|
174
174
|
Mocker.mock(baz).foo("bar") { :return_value }
|
175
175
|
|
176
|
-
baz.foo("bar").
|
176
|
+
expect(baz.foo("bar")).to eq :return_value
|
177
177
|
|
178
178
|
expect { Bogus.after_each_test }.not_to raise_error
|
179
179
|
end
|
@@ -246,7 +246,7 @@ describe Bogus::MockingDSL do
|
|
246
246
|
|
247
247
|
stub(greeter).greet("Jake") { "Hello Jake" }
|
248
248
|
|
249
|
-
greeter.greet("Jake").
|
249
|
+
expect(greeter.greet("Jake")).to eq "Hello Jake"
|
250
250
|
end
|
251
251
|
|
252
252
|
it "creates objects that can be mocked" do
|
@@ -254,13 +254,13 @@ describe Bogus::MockingDSL do
|
|
254
254
|
|
255
255
|
mock(greeter).greet("Jake") { "Hello Jake" }
|
256
256
|
|
257
|
-
greeter.greet("Jake").
|
257
|
+
expect(greeter.greet("Jake")).to eq "Hello Jake"
|
258
258
|
end
|
259
259
|
|
260
260
|
it "creates objects with some methods stubbed by default" do
|
261
261
|
greeter = fake(greet: "Hello Jake")
|
262
262
|
|
263
|
-
greeter.greet("Jake").
|
263
|
+
expect(greeter.greet("Jake")).to eq "Hello Jake"
|
264
264
|
end
|
265
265
|
|
266
266
|
it "creates objects that can be spied upon" do
|
@@ -268,8 +268,8 @@ describe Bogus::MockingDSL do
|
|
268
268
|
|
269
269
|
greeter.greet("Jake")
|
270
270
|
|
271
|
-
greeter.
|
272
|
-
greeter.
|
271
|
+
expect(greeter).to have_received.greet("Jake")
|
272
|
+
expect(greeter).to_not have_received.greet("Bob")
|
273
273
|
end
|
274
274
|
|
275
275
|
it "verifies mock expectations set on anonymous fakes" do
|
@@ -307,15 +307,15 @@ describe Bogus::MockingDSL do
|
|
307
307
|
it "returns configured fakes" do
|
308
308
|
the_fake = Stubber.fake(:globally_configured_fake)
|
309
309
|
|
310
|
-
the_fake.foo('a').
|
311
|
-
the_fake.bar('a', 'b').
|
310
|
+
expect(the_fake.foo('a')).to eq "foo"
|
311
|
+
expect(the_fake.bar('a', 'b')).to eq "bar"
|
312
312
|
end
|
313
313
|
|
314
314
|
it "allows overwriting stubbed methods" do
|
315
315
|
the_fake = Stubber.fake(:globally_configured_fake, bar: "baz")
|
316
316
|
|
317
|
-
the_fake.foo('a').
|
318
|
-
the_fake.bar('a', 'b').
|
317
|
+
expect(the_fake.foo('a')).to eq "foo"
|
318
|
+
expect(the_fake.bar('a', 'b')).to eq "baz"
|
319
319
|
end
|
320
320
|
|
321
321
|
it "evaluates the block passed to method in configuration when method is called" do
|
@@ -340,8 +340,8 @@ describe Bogus::MockingDSL do
|
|
340
340
|
it "replaces the class for the duration of the test" do
|
341
341
|
Stubber.fake_class(ThisClassWillBeReplaced, hello: "replaced!")
|
342
342
|
|
343
|
-
ThisClassWillBeReplaced.hello("foo").
|
344
|
-
ThisClassWillBeReplaced.
|
343
|
+
expect(ThisClassWillBeReplaced.hello("foo")).to eq "replaced!"
|
344
|
+
expect(ThisClassWillBeReplaced).to_not equal(TheOriginalClass)
|
345
345
|
end
|
346
346
|
|
347
347
|
it "makes it possible to spy on classes" do
|
@@ -349,15 +349,15 @@ describe Bogus::MockingDSL do
|
|
349
349
|
|
350
350
|
ThisClassWillBeReplaced.hello("foo")
|
351
351
|
|
352
|
-
ThisClassWillBeReplaced.
|
353
|
-
ThisClassWillBeReplaced.
|
352
|
+
expect(ThisClassWillBeReplaced).to Bogus.have_received.hello("foo")
|
353
|
+
expect(ThisClassWillBeReplaced).to_not Bogus.have_received.hello("bar")
|
354
354
|
end
|
355
355
|
|
356
356
|
it "restores the class after the test has finished" do
|
357
357
|
Stubber.fake_class(ThisClassWillBeReplaced)
|
358
358
|
Bogus.reset_overwritten_classes
|
359
359
|
|
360
|
-
ThisClassWillBeReplaced.
|
360
|
+
expect(ThisClassWillBeReplaced).to equal(TheOriginalClass)
|
361
361
|
end
|
362
362
|
end
|
363
363
|
|
@@ -385,7 +385,7 @@ describe Bogus::MockingDSL do
|
|
385
385
|
end
|
386
386
|
|
387
387
|
it "passes when all the mocked interactions were executed" do
|
388
|
-
sample.greet("Welcome").
|
388
|
+
expect(sample.greet("Welcome")).to eq "Welcome, John!"
|
389
389
|
|
390
390
|
Bogus.after_each_test
|
391
391
|
|
@@ -395,7 +395,7 @@ describe Bogus::MockingDSL do
|
|
395
395
|
end
|
396
396
|
|
397
397
|
it "fails when contracts are fullfilled" do
|
398
|
-
sample.greet("Hello").
|
398
|
+
expect(sample.greet("Hello")).to eq "Hello, John!"
|
399
399
|
|
400
400
|
Bogus.after_each_test
|
401
401
|
|
@@ -0,0 +1,38 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
if RUBY_VERSION >= '2.1'
|
4
|
+
describe "Ruby 2.1 required keyword arguments" do
|
5
|
+
class ExampleForRequiredKeywordArgs
|
6
|
+
eval "def foo(x:); end"
|
7
|
+
eval "def bar(x:, **rest); end"
|
8
|
+
end
|
9
|
+
|
10
|
+
include Bogus::MockingDSL
|
11
|
+
|
12
|
+
context "with regular objects" do
|
13
|
+
subject { ExampleForRequiredKeywordArgs.new }
|
14
|
+
|
15
|
+
it "does not allow calling the method without all required arguments" do
|
16
|
+
stub(subject).foo(any_args) { :hello }
|
17
|
+
|
18
|
+
expect{ subject.foo }.to raise_error(ArgumentError)
|
19
|
+
end
|
20
|
+
|
21
|
+
include_examples "stubbing methods with keyword arguments"
|
22
|
+
include_examples "stubbing methods with double splat"
|
23
|
+
end
|
24
|
+
|
25
|
+
context "with fakes" do
|
26
|
+
subject { fake(:example_for_required_keyword_args) }
|
27
|
+
|
28
|
+
it "allows spying without stubbing" do
|
29
|
+
subject.foo(x: "hello")
|
30
|
+
|
31
|
+
expect(subject).to have_received.foo(x: "hello")
|
32
|
+
end
|
33
|
+
|
34
|
+
include_examples "stubbing methods with keyword arguments"
|
35
|
+
include_examples "stubbing methods with double splat"
|
36
|
+
end
|
37
|
+
end
|
38
|
+
end
|
@@ -3,78 +3,22 @@ require 'spec_helper'
|
|
3
3
|
if RUBY_VERSION >= '2.0'
|
4
4
|
describe "Ruby 2.0 keyword arguments" do
|
5
5
|
class ExampleForKeywordArgs
|
6
|
-
eval "def foo(x:
|
6
|
+
eval "def foo(x: 1); end"
|
7
7
|
eval "def bar(x: 1, **rest); end"
|
8
8
|
end
|
9
9
|
|
10
10
|
include Bogus::MockingDSL
|
11
11
|
|
12
|
-
|
13
|
-
|
14
|
-
stub(subject).foo(any_args)
|
15
|
-
|
16
|
-
subject.foo(x: "test")
|
17
|
-
|
18
|
-
subject.should have_received.foo(x: "test")
|
19
|
-
subject.should_not have_received.foo(x: "baz")
|
20
|
-
end
|
21
|
-
|
22
|
-
it "can mock methods with keyword arguments" do
|
23
|
-
mock(subject).foo(x: 1) { :return }
|
24
|
-
|
25
|
-
subject.foo(x: 1).should == :return
|
26
|
-
|
27
|
-
expect { Bogus.after_each_test }.not_to raise_error
|
28
|
-
end
|
29
|
-
|
30
|
-
it "can stub methods with keyword arguments" do
|
31
|
-
stub(subject).foo(x: "bar") { :return_value }
|
32
|
-
|
33
|
-
subject.foo(x: "bar").should == :return_value
|
34
|
-
end
|
35
|
-
|
36
|
-
it "raises on error on unknown keyword" do
|
37
|
-
expect {
|
38
|
-
stub(subject).foo(x: "bar", baz: "baz")
|
39
|
-
}.to raise_error(ArgumentError)
|
40
|
-
end
|
41
|
-
|
42
|
-
it "does not overwrite the method signature" do
|
43
|
-
stub(subject).foo(x: 1)
|
44
|
-
|
45
|
-
expect {
|
46
|
-
subject.foo(bar: 1)
|
47
|
-
}.to raise_error(ArgumentError)
|
48
|
-
end
|
49
|
-
end
|
50
|
-
|
51
|
-
shared_examples_for "stubbing methods with double splat" do
|
52
|
-
it "can spy on stubbed methods" do
|
53
|
-
stub(subject).bar(any_args)
|
54
|
-
|
55
|
-
subject.bar(x: "test", z: "spec")
|
56
|
-
|
57
|
-
subject.should have_received.bar(x: "test", z: "spec")
|
58
|
-
subject.should_not have_received.bar(y: "baz")
|
59
|
-
end
|
60
|
-
|
61
|
-
it "can mock methods with keyword arguments" do
|
62
|
-
mock(subject).bar(x: 1, z: 2) { :return }
|
63
|
-
|
64
|
-
subject.bar(x: 1, z: 2).should == :return
|
12
|
+
context "with regular objects" do
|
13
|
+
subject { ExampleForKeywordArgs.new }
|
65
14
|
|
66
|
-
|
67
|
-
|
15
|
+
it "allows calling the method without the optional keyword args" do
|
16
|
+
stub(subject).foo(any_args)
|
68
17
|
|
69
|
-
|
70
|
-
stub(subject).bar(x: "bar", z: "bar") { :return_value }
|
18
|
+
subject.foo
|
71
19
|
|
72
|
-
subject.
|
20
|
+
expect(subject).to have_received.foo
|
73
21
|
end
|
74
|
-
end
|
75
|
-
|
76
|
-
context "with regular objects" do
|
77
|
-
subject { ExampleForKeywordArgs.new }
|
78
22
|
|
79
23
|
include_examples "stubbing methods with keyword arguments"
|
80
24
|
include_examples "stubbing methods with double splat"
|
@@ -86,7 +30,13 @@ if RUBY_VERSION >= '2.0'
|
|
86
30
|
it "allows spying without stubbing" do
|
87
31
|
subject.foo(x: "test")
|
88
32
|
|
89
|
-
subject.
|
33
|
+
expect(subject).to have_received.foo(x: "test")
|
34
|
+
end
|
35
|
+
|
36
|
+
it "allows calling the method without the optional keyword args" do
|
37
|
+
subject.foo
|
38
|
+
|
39
|
+
expect(subject).to have_received.foo
|
90
40
|
end
|
91
41
|
|
92
42
|
include_examples "stubbing methods with keyword arguments"
|