rspec-mocks 2.12.1 → 2.12.2
Sign up to get free protection for your applications and to get access to all the features.
- data/Changelog.md +17 -0
- data/lib/rspec/mocks.rb +8 -0
- data/lib/rspec/mocks/message_expectation.rb +6 -11
- data/lib/rspec/mocks/method_double.rb +19 -2
- data/lib/rspec/mocks/mutate_const.rb +1 -1
- data/lib/rspec/mocks/proxy.rb +1 -1
- data/lib/rspec/mocks/version.rb +1 -1
- data/lib/spec/mocks.rb +4 -0
- data/spec/rspec/mocks/and_call_original_spec.rb +22 -0
- data/spec/rspec/mocks/and_yield_spec.rb +7 -7
- data/spec/rspec/mocks/any_instance/message_chains_spec.rb +6 -6
- data/spec/rspec/mocks/any_instance_spec.rb +94 -94
- data/spec/rspec/mocks/any_number_of_times_spec.rb +2 -2
- data/spec/rspec/mocks/argument_expectation_spec.rb +3 -3
- data/spec/rspec/mocks/at_least_spec.rb +15 -15
- data/spec/rspec/mocks/at_most_spec.rb +7 -7
- data/spec/rspec/mocks/block_return_value_spec.rb +6 -6
- data/spec/rspec/mocks/bug_report_10260_spec.rb +1 -1
- data/spec/rspec/mocks/bug_report_10263_spec.rb +6 -4
- data/spec/rspec/mocks/bug_report_11545_spec.rb +1 -1
- data/spec/rspec/mocks/bug_report_600_spec.rb +1 -1
- data/spec/rspec/mocks/bug_report_7611_spec.rb +1 -1
- data/spec/rspec/mocks/bug_report_8165_spec.rb +4 -4
- data/spec/rspec/mocks/bug_report_830_spec.rb +2 -2
- data/spec/rspec/mocks/bug_report_957_spec.rb +2 -2
- data/spec/rspec/mocks/configuration_spec.rb +4 -4
- data/spec/rspec/mocks/double_spec.rb +1 -1
- data/spec/rspec/mocks/failing_argument_matchers_spec.rb +1 -1
- data/spec/rspec/mocks/hash_excluding_matcher_spec.rb +13 -13
- data/spec/rspec/mocks/hash_including_matcher_spec.rb +30 -30
- data/spec/rspec/mocks/mock_ordering_spec.rb +8 -8
- data/spec/rspec/mocks/mock_space_spec.rb +4 -4
- data/spec/rspec/mocks/mock_spec.rb +94 -90
- data/spec/rspec/mocks/multiple_return_value_spec.rb +21 -21
- data/spec/rspec/mocks/mutate_const_spec.rb +112 -102
- data/spec/rspec/mocks/nil_expectation_warning_spec.rb +6 -12
- data/spec/rspec/mocks/null_object_mock_spec.rb +12 -12
- data/spec/rspec/mocks/once_counts_spec.rb +7 -7
- data/spec/rspec/mocks/options_hash_spec.rb +6 -6
- data/spec/rspec/mocks/partial_mock_spec.rb +15 -15
- data/spec/rspec/mocks/partial_mock_using_mocks_directly_spec.rb +17 -17
- data/spec/rspec/mocks/passing_argument_matchers_spec.rb +6 -6
- data/spec/rspec/mocks/precise_counts_spec.rb +7 -7
- data/spec/rspec/mocks/record_messages_spec.rb +4 -4
- data/spec/rspec/mocks/serialization_spec.rb +3 -3
- data/spec/rspec/mocks/stash_spec.rb +1 -1
- data/spec/rspec/mocks/stub_chain_spec.rb +22 -22
- data/spec/rspec/mocks/stub_implementation_spec.rb +10 -10
- data/spec/rspec/mocks/stub_spec.rb +50 -31
- data/spec/rspec/mocks/stubbed_message_expectations_spec.rb +3 -3
- data/spec/rspec/mocks/test_double_spec.rb +3 -3
- data/spec/rspec/mocks/to_ary_spec.rb +7 -7
- data/spec/rspec/mocks/twice_counts_spec.rb +8 -8
- data/spec/rspec/mocks_spec.rb +13 -4
- data/spec/spec_helper.rb +4 -0
- metadata +5 -5
@@ -11,7 +11,6 @@ end
|
|
11
11
|
|
12
12
|
module RSpec
|
13
13
|
module Mocks
|
14
|
-
|
15
14
|
describe "an expectation set on nil" do
|
16
15
|
it "issues a warning with file and line number information" do
|
17
16
|
expected_warning = %r%An expectation of :foo was set on nil. Called from #{__FILE__}:#{__LINE__+3}(:in .+)?. Use allow_message_expectations_on_nil to disable warnings.%
|
@@ -20,27 +19,24 @@ module RSpec
|
|
20
19
|
nil.should_receive(:foo)
|
21
20
|
nil.foo
|
22
21
|
end
|
23
|
-
|
22
|
+
|
24
23
|
it "issues a warning when the expectation is negative" do
|
25
24
|
Kernel.should_receive(:warn)
|
26
25
|
|
27
26
|
nil.should_not_receive(:foo)
|
28
27
|
end
|
29
|
-
|
28
|
+
|
30
29
|
it "does not issue a warning when expectations are set to be allowed" do
|
31
30
|
allow_message_expectations_on_nil
|
32
31
|
Kernel.should_not_receive(:warn)
|
33
|
-
|
32
|
+
|
34
33
|
nil.should_receive(:foo)
|
35
34
|
nil.should_not_receive(:bar)
|
36
35
|
nil.foo
|
37
36
|
end
|
38
|
-
|
39
37
|
end
|
40
|
-
|
41
|
-
describe "#allow_message_expectations_on_nil" do
|
42
|
-
|
43
38
|
|
39
|
+
describe "#allow_message_expectations_on_nil" do
|
44
40
|
it "does not effect subsequent examples" do
|
45
41
|
example_group = empty_example_group
|
46
42
|
example_group.it("when called in one example that doesn't end up setting an expectation on nil") do
|
@@ -51,12 +47,10 @@ module RSpec
|
|
51
47
|
nil.should_receive(:foo)
|
52
48
|
nil.foo
|
53
49
|
end
|
54
|
-
|
50
|
+
|
55
51
|
example_group
|
56
|
-
|
57
52
|
end
|
58
|
-
|
59
53
|
end
|
60
|
-
|
61
54
|
end
|
62
55
|
end
|
56
|
+
|
@@ -8,12 +8,12 @@ module RSpec
|
|
8
8
|
end
|
9
9
|
|
10
10
|
it "says it does not respond to messages it doesn't understand" do
|
11
|
-
@double.
|
11
|
+
expect(@double).not_to respond_to(:foo)
|
12
12
|
end
|
13
13
|
|
14
14
|
it "says it responds to messages it does understand" do
|
15
15
|
@double.stub(:foo)
|
16
|
-
@double.
|
16
|
+
expect(@double).to respond_to(:foo)
|
17
17
|
end
|
18
18
|
|
19
19
|
it "raises an error when interpolated in a string as an integer" do
|
@@ -33,12 +33,12 @@ module RSpec
|
|
33
33
|
end
|
34
34
|
|
35
35
|
it "says it responds to everything" do
|
36
|
-
@double.
|
36
|
+
expect(@double).to respond_to(:any_message_it_gets)
|
37
37
|
end
|
38
38
|
|
39
39
|
it "allows explicit stubs" do
|
40
40
|
@double.stub(:foo) { "bar" }
|
41
|
-
@double.foo.
|
41
|
+
expect(@double.foo).to eq("bar")
|
42
42
|
end
|
43
43
|
|
44
44
|
it "allows explicit expectation" do
|
@@ -48,20 +48,20 @@ module RSpec
|
|
48
48
|
|
49
49
|
it 'continues to return self from an explicit expectation' do
|
50
50
|
@double.should_receive(:bar)
|
51
|
-
@double.foo.bar.
|
51
|
+
expect(@double.foo.bar).to be(@double)
|
52
52
|
end
|
53
53
|
|
54
54
|
it 'returns an explicitly stubbed value from an expectation with no implementation' do
|
55
55
|
@double.stub(:foo => "bar")
|
56
56
|
@double.should_receive(:foo)
|
57
|
-
@double.foo.
|
57
|
+
expect(@double.foo).to eq("bar")
|
58
58
|
end
|
59
59
|
|
60
60
|
it "fails verification when explicit exception not met" do
|
61
|
-
|
61
|
+
expect {
|
62
62
|
@double.should_receive(:something)
|
63
63
|
@double.rspec_verify
|
64
|
-
|
64
|
+
}.to raise_error(RSpec::Mocks::MockExpectationError)
|
65
65
|
end
|
66
66
|
|
67
67
|
it "ignores unexpected methods" do
|
@@ -86,21 +86,21 @@ module RSpec
|
|
86
86
|
# @double.to_int.to_int.to_int...etc until it gets an integer,
|
87
87
|
# and thus gets stuck in an infinite loop unless our double
|
88
88
|
# returns an int value from #to_int.
|
89
|
-
("%i" % @double).
|
89
|
+
expect(("%i" % @double)).to eq("0")
|
90
90
|
end
|
91
91
|
end
|
92
|
-
|
92
|
+
|
93
93
|
describe "#as_null_object" do
|
94
94
|
it "sets the object to null_object" do
|
95
95
|
obj = double('anything').as_null_object
|
96
|
-
obj.
|
96
|
+
expect(obj).to be_null_object
|
97
97
|
end
|
98
98
|
end
|
99
99
|
|
100
100
|
describe "#null_object?" do
|
101
101
|
it "defaults to false" do
|
102
102
|
obj = double('anything')
|
103
|
-
obj.
|
103
|
+
expect(obj).not_to be_null_object
|
104
104
|
end
|
105
105
|
end
|
106
106
|
end
|
@@ -27,25 +27,25 @@ module RSpec
|
|
27
27
|
|
28
28
|
it "fails when called with wrong args" do
|
29
29
|
@double.should_receive(:do_something).once.with("a", "b", "c")
|
30
|
-
|
30
|
+
expect {
|
31
31
|
@double.do_something("d", "e", "f")
|
32
|
-
|
32
|
+
}.to raise_error(RSpec::Mocks::MockExpectationError)
|
33
33
|
@double.rspec_reset
|
34
34
|
end
|
35
35
|
|
36
36
|
it "fails fast when called twice" do
|
37
37
|
@double.should_receive(:do_something).once
|
38
38
|
@double.do_something
|
39
|
-
|
39
|
+
expect {
|
40
40
|
@double.do_something
|
41
|
-
|
41
|
+
}.to raise_error(RSpec::Mocks::MockExpectationError)
|
42
42
|
end
|
43
|
-
|
43
|
+
|
44
44
|
it "fails when not called" do
|
45
45
|
@double.should_receive(:do_something).once
|
46
|
-
|
46
|
+
expect {
|
47
47
|
@double.rspec_verify
|
48
|
-
|
48
|
+
}.to raise_error(RSpec::Mocks::MockExpectationError)
|
49
49
|
end
|
50
50
|
end
|
51
51
|
end
|
@@ -10,25 +10,25 @@ module RSpec
|
|
10
10
|
mock.rspec_verify
|
11
11
|
rescue Exception => e
|
12
12
|
ensure
|
13
|
-
e.backtrace.to_s.
|
13
|
+
expect(e.backtrace.to_s).to match /\/path\/to\/blah.ext:37/m
|
14
14
|
end
|
15
15
|
end
|
16
16
|
|
17
17
|
it "uses the message supplied with :message" do
|
18
|
-
|
18
|
+
expect {
|
19
19
|
m = RSpec::Mocks::Mock.new("a mock")
|
20
20
|
m.should_receive(:message, :message => "recebi nada")
|
21
21
|
m.rspec_verify
|
22
|
-
}.
|
22
|
+
}.to raise_error("recebi nada")
|
23
23
|
end
|
24
|
-
|
24
|
+
|
25
25
|
it "uses the message supplied with :message after a similar stub" do
|
26
|
-
|
26
|
+
expect {
|
27
27
|
m = RSpec::Mocks::Mock.new("a mock")
|
28
28
|
m.stub(:message)
|
29
29
|
m.should_receive(:message, :message => "from mock")
|
30
30
|
m.rspec_verify
|
31
|
-
}.
|
31
|
+
}.to raise_error("from mock")
|
32
32
|
end
|
33
33
|
end
|
34
34
|
end
|
@@ -14,9 +14,9 @@ module RSpec
|
|
14
14
|
|
15
15
|
it "names the class in the failure message when expectation is on class" do
|
16
16
|
Object.should_receive(:foo)
|
17
|
-
|
17
|
+
expect {
|
18
18
|
Object.rspec_verify
|
19
|
-
|
19
|
+
}.to raise_error(RSpec::Mocks::MockExpectationError, /<Object \(class\)>/)
|
20
20
|
end
|
21
21
|
|
22
22
|
it "does not conflict with @options in the object" do
|
@@ -36,35 +36,35 @@ module RSpec
|
|
36
36
|
end
|
37
37
|
|
38
38
|
it "should_not_receive returns a negative message expectation" do
|
39
|
-
object.should_not_receive(:foobar).
|
39
|
+
expect(object.should_not_receive(:foobar)).to be_kind_of(RSpec::Mocks::NegativeMessageExpectation)
|
40
40
|
end
|
41
41
|
|
42
42
|
it "should_receive mocks out the method" do
|
43
43
|
object.should_receive(:foobar).with(:test_param).and_return(1)
|
44
|
-
object.foobar(:test_param).
|
44
|
+
expect(object.foobar(:test_param)).to equal(1)
|
45
45
|
end
|
46
46
|
|
47
47
|
it "should_receive handles a hash" do
|
48
48
|
object.should_receive(:foobar).with(:key => "value").and_return(1)
|
49
|
-
object.foobar(:key => "value").
|
49
|
+
expect(object.foobar(:key => "value")).to equal(1)
|
50
50
|
end
|
51
51
|
|
52
52
|
it "should_receive handles an inner hash" do
|
53
53
|
hash = {:a => {:key => "value"}}
|
54
54
|
object.should_receive(:foobar).with(:key => "value").and_return(1)
|
55
|
-
object.foobar(hash[:a]).
|
55
|
+
expect(object.foobar(hash[:a])).to equal(1)
|
56
56
|
end
|
57
57
|
|
58
58
|
it "should_receive returns a message expectation" do
|
59
|
-
object.should_receive(:foobar).
|
59
|
+
expect(object.should_receive(:foobar)).to be_kind_of(RSpec::Mocks::MessageExpectation)
|
60
60
|
object.foobar
|
61
61
|
end
|
62
62
|
|
63
63
|
it "should_receive verifies method was called" do
|
64
64
|
object.should_receive(:foobar).with(:test_param).and_return(1)
|
65
|
-
|
65
|
+
expect {
|
66
66
|
object.rspec_verify
|
67
|
-
|
67
|
+
}.to raise_error(RSpec::Mocks::MockExpectationError)
|
68
68
|
end
|
69
69
|
|
70
70
|
it "should_receive also takes a String argument" do
|
@@ -74,9 +74,9 @@ module RSpec
|
|
74
74
|
|
75
75
|
it "should_not_receive also takes a String argument" do
|
76
76
|
object.should_not_receive('foobar')
|
77
|
-
|
77
|
+
expect {
|
78
78
|
object.foobar
|
79
|
-
|
79
|
+
}.to raise_error(RSpec::Mocks::MockExpectationError)
|
80
80
|
end
|
81
81
|
|
82
82
|
it "uses reports nil in the error message" do
|
@@ -129,7 +129,7 @@ module RSpec
|
|
129
129
|
|
130
130
|
it 'works properly' do
|
131
131
|
instance.should_receive(:proxied?).and_return(false)
|
132
|
-
instance.
|
132
|
+
expect(instance).not_to be_proxied
|
133
133
|
end
|
134
134
|
end
|
135
135
|
|
@@ -175,19 +175,19 @@ module RSpec
|
|
175
175
|
|
176
176
|
it 'keeps public methods public' do
|
177
177
|
object.should_receive(:public_method)
|
178
|
-
object.public_methods.
|
178
|
+
expect(object.public_methods).to include_method(:public_method)
|
179
179
|
object.public_method
|
180
180
|
end
|
181
181
|
|
182
182
|
it 'keeps private methods private' do
|
183
183
|
object.should_receive(:private_method)
|
184
|
-
object.private_methods.
|
184
|
+
expect(object.private_methods).to include_method(:private_method)
|
185
185
|
object.public_method
|
186
186
|
end
|
187
187
|
|
188
188
|
it 'keeps protected methods protected' do
|
189
189
|
object.should_receive(:protected_method)
|
190
|
-
object.protected_methods.
|
190
|
+
expect(object.protected_methods).to include_method(:protected_method)
|
191
191
|
object.public_method
|
192
192
|
end
|
193
193
|
|
@@ -32,23 +32,23 @@ module RSpec::Mocks
|
|
32
32
|
# obj.should_receive(:msg)
|
33
33
|
# obj.msg
|
34
34
|
# obj.rspec_verify
|
35
|
-
#
|
35
|
+
# expect {
|
36
36
|
# obj.msg
|
37
|
-
#
|
38
|
-
#
|
37
|
+
# }.to raise_error(NoMethodError)
|
38
|
+
#
|
39
39
|
# end
|
40
40
|
it "fails when expected message is not received" do
|
41
41
|
obj.should_receive(:msg)
|
42
|
-
|
42
|
+
expect {
|
43
43
|
obj.rspec_verify
|
44
|
-
|
44
|
+
}.to raise_error(RSpec::Mocks::MockExpectationError)
|
45
45
|
end
|
46
46
|
|
47
47
|
it "fails when message is received with incorrect args" do
|
48
48
|
obj.should_receive(:msg).with(:correct_arg)
|
49
|
-
|
49
|
+
expect {
|
50
50
|
obj.msg(:incorrect_arg)
|
51
|
-
|
51
|
+
}.to raise_error(RSpec::Mocks::MockExpectationError)
|
52
52
|
obj.msg(:correct_arg)
|
53
53
|
end
|
54
54
|
|
@@ -65,30 +65,30 @@ module RSpec::Mocks
|
|
65
65
|
end
|
66
66
|
|
67
67
|
it "restores the original method if it existed" do
|
68
|
-
obj.existing_method.
|
68
|
+
expect(obj.existing_method).to equal(:original_value)
|
69
69
|
obj.should_receive(:existing_method).and_return(:mock_value)
|
70
|
-
obj.existing_method.
|
70
|
+
expect(obj.existing_method).to equal(:mock_value)
|
71
71
|
obj.rspec_verify
|
72
|
-
obj.existing_method.
|
72
|
+
expect(obj.existing_method).to equal(:original_value)
|
73
73
|
end
|
74
74
|
|
75
75
|
context "with an instance method handled by method_missing" do
|
76
76
|
it "restores the original behavior" do
|
77
|
-
obj.captured_by_method_missing.
|
77
|
+
expect(obj.captured_by_method_missing).to eq("response generated by method missing")
|
78
78
|
obj.stub(:captured_by_method_missing) { "foo" }
|
79
|
-
obj.captured_by_method_missing.
|
79
|
+
expect(obj.captured_by_method_missing).to eq("foo")
|
80
80
|
obj.rspec_reset
|
81
|
-
obj.captured_by_method_missing.
|
81
|
+
expect(obj.captured_by_method_missing).to eq("response generated by method missing")
|
82
82
|
end
|
83
83
|
end
|
84
84
|
|
85
|
-
context "with a class method handled by method_missing" do
|
85
|
+
context "with a class method handled by method_missing" do
|
86
86
|
it "restores the original behavior" do
|
87
|
-
klass.captured_by_method_missing.
|
87
|
+
expect(klass.captured_by_method_missing).to eq("response generated by method missing")
|
88
88
|
klass.stub(:captured_by_method_missing) { "foo" }
|
89
|
-
klass.captured_by_method_missing.
|
89
|
+
expect(klass.captured_by_method_missing).to eq("foo")
|
90
90
|
klass.rspec_reset
|
91
|
-
klass.captured_by_method_missing.
|
91
|
+
expect(klass.captured_by_method_missing).to eq("response generated by method missing")
|
92
92
|
end
|
93
93
|
end
|
94
94
|
end
|
@@ -87,11 +87,11 @@ module RSpec
|
|
87
87
|
context "handling block matchers" do
|
88
88
|
it "matches arguments against RSpec expectations" do
|
89
89
|
@double.should_receive(:random_call).with {|arg1, arg2, arr, *rest|
|
90
|
-
arg1.
|
91
|
-
arg2.
|
92
|
-
arg2.
|
93
|
-
arr.map {|i| i * 2}.
|
94
|
-
rest.
|
90
|
+
expect(arg1).to eq 5
|
91
|
+
expect(arg2).to have_at_least(3).characters
|
92
|
+
expect(arg2).to have_at_most(10).characters
|
93
|
+
expect(arr.map {|i| i * 2}).to eq [2,4,6]
|
94
|
+
expect(rest).to eq [:fee, "fi", 4]
|
95
95
|
}
|
96
96
|
@double.random_call 5, "hello", [1,2,3], :fee, "fi", 4
|
97
97
|
end
|
@@ -100,7 +100,7 @@ module RSpec
|
|
100
100
|
eval_count = 0
|
101
101
|
@double.should_receive(:msg).with {|a| eval_count += 1}
|
102
102
|
@double.msg(:ignore)
|
103
|
-
eval_count.
|
103
|
+
expect(eval_count).to eq(1)
|
104
104
|
end
|
105
105
|
end
|
106
106
|
|
@@ -11,9 +11,9 @@ module RSpec
|
|
11
11
|
@double.should_receive(:do_something).exactly(3).times
|
12
12
|
@double.do_something
|
13
13
|
@double.do_something
|
14
|
-
|
14
|
+
expect {
|
15
15
|
@double.rspec_verify
|
16
|
-
|
16
|
+
}.to raise_error(RSpec::Mocks::MockExpectationError)
|
17
17
|
end
|
18
18
|
|
19
19
|
it "fails fast when exactly n times method is called more than n times" do
|
@@ -21,16 +21,16 @@ module RSpec
|
|
21
21
|
@double.do_something
|
22
22
|
@double.do_something
|
23
23
|
@double.do_something
|
24
|
-
|
24
|
+
expect {
|
25
25
|
@double.do_something
|
26
|
-
|
26
|
+
}.to raise_error(RSpec::Mocks::MockExpectationError)
|
27
27
|
end
|
28
28
|
|
29
29
|
it "fails when exactly n times method is never called" do
|
30
30
|
@double.should_receive(:do_something).exactly(3).times
|
31
|
-
|
31
|
+
expect {
|
32
32
|
@double.rspec_verify
|
33
|
-
|
33
|
+
}.to raise_error(RSpec::Mocks::MockExpectationError)
|
34
34
|
end
|
35
35
|
|
36
36
|
it "passes if exactly n times method is called exactly n times" do
|
@@ -43,7 +43,7 @@ module RSpec
|
|
43
43
|
|
44
44
|
it "returns the value given by a block when the exactly once method is called" do
|
45
45
|
@double.should_receive(:to_s).exactly(:once) { "testing" }
|
46
|
-
@double.to_s.
|
46
|
+
expect(@double.to_s).to eq "testing"
|
47
47
|
@double.rspec_verify
|
48
48
|
end
|
49
49
|
|
@@ -7,19 +7,19 @@ module RSpec
|
|
7
7
|
@mock = double("mock").as_null_object
|
8
8
|
end
|
9
9
|
it "answers false for received_message? when no messages received" do
|
10
|
-
@mock.received_message?(:message).
|
10
|
+
expect(@mock.received_message?(:message)).to be_false
|
11
11
|
end
|
12
12
|
it "answers true for received_message? when message received" do
|
13
13
|
@mock.message
|
14
|
-
@mock.received_message?(:message).
|
14
|
+
expect(@mock.received_message?(:message)).to be_true
|
15
15
|
end
|
16
16
|
it "answers true for received_message? when message received with correct args" do
|
17
17
|
@mock.message 1,2,3
|
18
|
-
@mock.received_message?(:message, 1,2,3).
|
18
|
+
expect(@mock.received_message?(:message, 1,2,3)).to be_true
|
19
19
|
end
|
20
20
|
it "answers false for received_message? when message received with incorrect args" do
|
21
21
|
@mock.message 1,2,3
|
22
|
-
@mock.received_message?(:message, 1,2).
|
22
|
+
expect(@mock.received_message?(:message, 1,2)).to be_false
|
23
23
|
end
|
24
24
|
end
|
25
25
|
end
|