rspec-mocks 2.99.4 → 3.0.0.beta1
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +14 -6
- checksums.yaml.gz.sig +2 -0
- data.tar.gz.sig +1 -0
- data/Changelog.md +89 -105
- data/License.txt +1 -0
- data/README.md +77 -57
- data/features/argument_matchers/explicit.feature +5 -5
- data/features/argument_matchers/general_matchers.feature +10 -10
- data/features/argument_matchers/type_matchers.feature +3 -3
- data/features/message_expectations/allow_any_instance_of.feature +1 -1
- data/features/message_expectations/any_instance.feature +27 -5
- data/features/message_expectations/call_original.feature +2 -2
- data/features/message_expectations/expect_message_using_expect.feature +2 -2
- data/features/message_expectations/expect_message_using_should_receive.feature +2 -2
- data/features/message_expectations/receive_counts.feature +7 -7
- data/features/message_expectations/warn_when_expectation_is_set_on_nil.feature +3 -3
- data/features/method_stubs/README.md +3 -0
- data/features/method_stubs/any_instance.feature +11 -11
- data/features/method_stubs/as_null_object.feature +4 -4
- data/features/method_stubs/simple_return_value_with_stub.feature +7 -7
- data/features/method_stubs/stub_chain.feature +3 -3
- data/features/method_stubs/stub_implementation.feature +2 -2
- data/features/method_stubs/to_ary.feature +2 -2
- data/features/mutating_constants/hiding_defined_constant.feature +2 -2
- data/features/mutating_constants/stub_defined_constant.feature +5 -5
- data/features/mutating_constants/stub_undefined_constant.feature +6 -6
- data/features/outside_rspec/configuration.feature +0 -2
- data/features/outside_rspec/standalone.feature +1 -1
- data/features/spies/spy_partial_mock_method.feature +2 -2
- data/features/spies/spy_pure_mock_method.feature +5 -5
- data/features/spies/spy_unstubbed_method.feature +1 -1
- data/features/support/env.rb +10 -1
- data/features/test_frameworks/test_unit.feature +1 -1
- data/features/verifying_doubles/class_doubles.feature +88 -0
- data/features/verifying_doubles/dynamic_classes.feature +72 -0
- data/features/verifying_doubles/introduction.feature +85 -0
- data/features/verifying_doubles/object_doubles.feature +65 -0
- data/features/verifying_doubles/partial_doubles.feature +34 -0
- data/lib/rspec/mocks.rb +8 -34
- data/lib/rspec/mocks/any_instance/chain.rb +4 -34
- data/lib/rspec/mocks/any_instance/expectation_chain.rb +14 -4
- data/lib/rspec/mocks/any_instance/message_chains.rb +27 -12
- data/lib/rspec/mocks/any_instance/recorder.rb +23 -31
- data/lib/rspec/mocks/any_instance/stub_chain.rb +9 -4
- data/lib/rspec/mocks/argument_list_matcher.rb +8 -1
- data/lib/rspec/mocks/argument_matchers.rb +26 -12
- data/lib/rspec/mocks/arity_calculator.rb +66 -0
- data/lib/rspec/mocks/configuration.rb +42 -14
- data/lib/rspec/mocks/error_generator.rb +34 -10
- data/lib/rspec/mocks/example_methods.rb +64 -19
- data/lib/rspec/mocks/extensions/marshal.rb +0 -15
- data/lib/rspec/mocks/framework.rb +4 -4
- data/lib/rspec/mocks/instance_method_stasher.rb +80 -62
- data/lib/rspec/mocks/matchers/have_received.rb +18 -14
- data/lib/rspec/mocks/matchers/receive.rb +29 -7
- data/lib/rspec/mocks/matchers/receive_messages.rb +72 -0
- data/lib/rspec/mocks/message_expectation.rb +95 -148
- data/lib/rspec/mocks/method_double.rb +77 -139
- data/lib/rspec/mocks/method_reference.rb +95 -0
- data/lib/rspec/mocks/mock.rb +1 -1
- data/lib/rspec/mocks/mutate_const.rb +12 -9
- data/lib/rspec/mocks/object_reference.rb +90 -0
- data/lib/rspec/mocks/order_group.rb +49 -7
- data/lib/rspec/mocks/proxy.rb +72 -33
- data/lib/rspec/mocks/proxy_for_nil.rb +2 -2
- data/lib/rspec/mocks/space.rb +13 -18
- data/lib/rspec/mocks/stub_chain.rb +2 -2
- data/lib/rspec/mocks/syntax.rb +61 -36
- data/lib/rspec/mocks/targets.rb +40 -19
- data/lib/rspec/mocks/test_double.rb +12 -56
- data/lib/rspec/mocks/verifying_double.rb +77 -0
- data/lib/rspec/mocks/verifying_message_expecation.rb +60 -0
- data/lib/rspec/mocks/verifying_proxy.rb +151 -0
- data/lib/rspec/mocks/version.rb +1 -1
- data/spec/rspec/mocks/and_call_original_spec.rb +34 -30
- data/spec/rspec/mocks/and_yield_spec.rb +2 -2
- data/spec/rspec/mocks/any_instance/message_chains_spec.rb +1 -1
- data/spec/rspec/mocks/any_instance_spec.rb +53 -260
- data/spec/rspec/mocks/argument_expectation_spec.rb +4 -4
- data/spec/rspec/mocks/arity_calculator_spec.rb +95 -0
- data/spec/rspec/mocks/array_including_matcher_spec.rb +41 -0
- data/spec/rspec/mocks/at_least_spec.rb +4 -32
- data/spec/rspec/mocks/block_return_value_spec.rb +4 -135
- data/spec/rspec/mocks/combining_implementation_instructions_spec.rb +10 -11
- data/spec/rspec/mocks/configuration_spec.rb +79 -0
- data/spec/rspec/mocks/double_spec.rb +10 -78
- data/spec/rspec/mocks/extensions/marshal_spec.rb +0 -8
- data/spec/rspec/mocks/failing_argument_matchers_spec.rb +49 -4
- data/spec/rspec/mocks/instance_method_stasher_spec.rb +20 -3
- data/spec/rspec/mocks/matchers/have_received_spec.rb +74 -0
- data/spec/rspec/mocks/matchers/receive_messages_spec.rb +140 -0
- data/spec/rspec/mocks/matchers/receive_spec.rb +82 -42
- data/spec/rspec/mocks/methods_spec.rb +1 -1
- data/spec/rspec/mocks/{bug_report_830_spec.rb → mock_expectation_error_spec.rb} +4 -3
- data/spec/rspec/mocks/mock_ordering_spec.rb +11 -0
- data/spec/rspec/mocks/mock_space_spec.rb +10 -1
- data/spec/rspec/mocks/mock_spec.rb +26 -82
- data/spec/rspec/mocks/multiple_return_value_spec.rb +1 -1
- data/spec/rspec/mocks/mutate_const_spec.rb +18 -5
- data/spec/rspec/mocks/null_object_mock_spec.rb +6 -4
- data/spec/rspec/mocks/options_hash_spec.rb +3 -3
- data/spec/rspec/mocks/order_group_spec.rb +27 -0
- data/spec/rspec/mocks/partial_mock_spec.rb +101 -1
- data/spec/rspec/mocks/passing_argument_matchers_spec.rb +3 -20
- data/spec/rspec/mocks/record_messages_spec.rb +4 -4
- data/spec/rspec/mocks/serialization_spec.rb +4 -6
- data/spec/rspec/mocks/space_spec.rb +3 -3
- data/spec/rspec/mocks/stub_chain_spec.rb +0 -12
- data/spec/rspec/mocks/stub_spec.rb +23 -44
- data/spec/rspec/mocks/test_double_spec.rb +3 -22
- data/spec/rspec/mocks/verifying_double_spec.rb +327 -0
- data/spec/rspec/mocks/verifying_message_expecation_spec.rb +68 -0
- data/spec/rspec/mocks_spec.rb +16 -39
- data/spec/spec_helper.rb +29 -18
- metadata +131 -86
- metadata.gz.sig +1 -0
- data/features/message_expectations/expect_any_instance_of.feature +0 -27
- data/lib/rspec/mocks/caller_filter.rb +0 -60
- data/lib/rspec/mocks/deprecation.rb +0 -26
- data/lib/rspec/mocks/extensions/instance_exec.rb +0 -34
- data/lib/rspec/mocks/extensions/proc.rb +0 -63
- data/lib/spec/mocks.rb +0 -4
- data/spec/rspec/mocks/and_return_spec.rb +0 -17
- data/spec/rspec/mocks/any_number_of_times_spec.rb +0 -36
- data/spec/rspec/mocks/before_all_spec.rb +0 -74
- data/spec/rspec/mocks/bug_report_10260_spec.rb +0 -8
- data/spec/rspec/mocks/bug_report_10263_spec.rb +0 -27
- data/spec/rspec/mocks/bug_report_11545_spec.rb +0 -32
- data/spec/rspec/mocks/bug_report_496_spec.rb +0 -17
- data/spec/rspec/mocks/bug_report_600_spec.rb +0 -22
- data/spec/rspec/mocks/bug_report_7611_spec.rb +0 -16
- data/spec/rspec/mocks/bug_report_8165_spec.rb +0 -31
- data/spec/rspec/mocks/bug_report_957_spec.rb +0 -22
@@ -9,8 +9,30 @@ module RSpec
|
|
9
9
|
::RSpec::Mocks.space.verify_all
|
10
10
|
end
|
11
11
|
|
12
|
-
|
13
|
-
|
12
|
+
describe "expectations/allowances on any instance recorders" do
|
13
|
+
include_context "with syntax", [:expect, :should]
|
14
|
+
|
15
|
+
it "warns about allow(Klass.any_instance).to receive..." do
|
16
|
+
expect(RSpec).to receive(:warning).with(/allow.*any_instance.*is probably not what you meant.*allow_any_instance_of.*instead/)
|
17
|
+
allow(Object.any_instance).to receive(:foo)
|
18
|
+
end
|
19
|
+
|
20
|
+
it "includes the correct call site in the allow warning" do
|
21
|
+
expect_warning_with_call_site(__FILE__, __LINE__ + 1)
|
22
|
+
allow(Object.any_instance).to receive(:foo)
|
23
|
+
end
|
24
|
+
|
25
|
+
it "warns about expect(Klass.any_instance).to receive..." do
|
26
|
+
expect(RSpec).to receive(:warning).with(/expect.*any_instance.*is probably not what you meant.*expect_any_instance_of.*instead/)
|
27
|
+
expect(Object.any_instance).to receive(:foo)
|
28
|
+
Object.any_instance.foo
|
29
|
+
end
|
30
|
+
|
31
|
+
it "includes the correct call site in the expect warning" do
|
32
|
+
expect_warning_with_call_site(__FILE__, __LINE__ + 1)
|
33
|
+
expect(Object.any_instance).to receive(:foo)
|
34
|
+
Object.any_instance.foo
|
35
|
+
end
|
14
36
|
end
|
15
37
|
|
16
38
|
shared_examples_for "a receive matcher" do |*options|
|
@@ -28,17 +50,6 @@ module RSpec
|
|
28
50
|
}.to raise_error(/received :foo with unexpected arguments/)
|
29
51
|
end
|
30
52
|
|
31
|
-
it 'warns about the change to === in RSpec 3 when used with a DateTime' do
|
32
|
-
wrapped.to receive(:foo).with(DateTime.new(2014,1,1,1))
|
33
|
-
allow_deprecation
|
34
|
-
receiver.foo(DateTime.new(2014,1,1,1))
|
35
|
-
|
36
|
-
expect {
|
37
|
-
expect_warn_deprecation_with_call_site __FILE__, __LINE__ + 1
|
38
|
-
receiver.foo(DateTime.new(2014,1,1,2))
|
39
|
-
}.to raise_error(/received :foo with unexpected arguments/)
|
40
|
-
end
|
41
|
-
|
42
53
|
it 'allows a `do...end` block implementation to be provided' do
|
43
54
|
wrapped.to receive(:foo) do
|
44
55
|
4
|
@@ -85,7 +96,7 @@ module RSpec
|
|
85
96
|
end
|
86
97
|
|
87
98
|
shared_examples_for "an expect syntax allowance" do |*options|
|
88
|
-
|
99
|
+
it_behaves_like "a receive matcher", *options
|
89
100
|
|
90
101
|
it 'does not expect the message to be received' do
|
91
102
|
wrapped.to receive(:foo)
|
@@ -106,7 +117,7 @@ module RSpec
|
|
106
117
|
end
|
107
118
|
|
108
119
|
shared_examples_for "an expect syntax expectation" do |*options|
|
109
|
-
|
120
|
+
it_behaves_like "a receive matcher", *options
|
110
121
|
|
111
122
|
it 'sets up a message expectation that passes if the message is received' do
|
112
123
|
wrapped.to receive(:foo)
|
@@ -120,8 +131,6 @@ module RSpec
|
|
120
131
|
expect {
|
121
132
|
verify_all
|
122
133
|
}.to raise_error(RSpec::Mocks::MockExpectationError)
|
123
|
-
|
124
|
-
reset_all
|
125
134
|
end
|
126
135
|
|
127
136
|
it "reports the line number of expectation of unreceived message", :pending => options.include?(:does_not_report_line_num) do
|
@@ -181,61 +190,92 @@ module RSpec
|
|
181
190
|
end
|
182
191
|
end
|
183
192
|
|
193
|
+
shared_examples_for "resets partial mocks cleanly" do
|
194
|
+
let(:klass) { Struct.new(:foo) }
|
195
|
+
let(:object) { klass.new :bar }
|
196
|
+
|
197
|
+
it "removes the method double" do
|
198
|
+
target.to receive(:foo).and_return(:baz)
|
199
|
+
expect { reset object }.to change { object.foo }.from(:baz).to(:bar)
|
200
|
+
end
|
201
|
+
end
|
202
|
+
|
203
|
+
shared_examples_for "resets partial mocks of any instance cleanly" do
|
204
|
+
let(:klass) { Struct.new(:foo) }
|
205
|
+
let(:object) { klass.new :bar }
|
206
|
+
|
207
|
+
it "removes the method double" do
|
208
|
+
target.to receive(:foo).and_return(:baz)
|
209
|
+
expect {
|
210
|
+
::RSpec::Mocks.space.verify_all
|
211
|
+
}.to change { object.foo }.from(:baz).to(:bar)
|
212
|
+
end
|
213
|
+
end
|
214
|
+
|
184
215
|
describe "allow(...).to receive" do
|
185
|
-
|
216
|
+
it_behaves_like "an expect syntax allowance" do
|
186
217
|
let(:receiver) { double }
|
187
218
|
let(:wrapped) { allow(receiver) }
|
188
219
|
end
|
220
|
+
it_behaves_like "resets partial mocks cleanly" do
|
221
|
+
let(:target) { allow(object) }
|
222
|
+
end
|
189
223
|
end
|
190
224
|
|
191
225
|
describe "allow(...).not_to receive" do
|
192
|
-
|
226
|
+
it_behaves_like "an expect syntax negative allowance" do
|
193
227
|
let(:wrapped) { allow(double) }
|
194
228
|
end
|
195
229
|
end
|
196
230
|
|
197
231
|
describe "allow_any_instance_of(...).to receive" do
|
198
|
-
|
199
|
-
|
200
|
-
include_examples "an expect syntax allowance" do
|
232
|
+
it_behaves_like "an expect syntax allowance" do
|
201
233
|
let(:klass) { Class.new }
|
202
234
|
let(:wrapped) { allow_any_instance_of(klass) }
|
203
235
|
let(:receiver) { klass.new }
|
204
236
|
end
|
237
|
+
|
238
|
+
it_behaves_like "resets partial mocks of any instance cleanly" do
|
239
|
+
let(:target) { allow_any_instance_of(klass) }
|
240
|
+
end
|
205
241
|
end
|
206
242
|
|
207
243
|
describe "allow_any_instance_of(...).not_to receive" do
|
208
|
-
|
244
|
+
it_behaves_like "an expect syntax negative allowance" do
|
209
245
|
let(:wrapped) { allow_any_instance_of(Class.new) }
|
210
246
|
end
|
211
247
|
end
|
212
248
|
|
213
249
|
describe "expect(...).to receive" do
|
214
|
-
|
250
|
+
it_behaves_like "an expect syntax expectation", :allow_other_matchers do
|
215
251
|
let(:receiver) { double }
|
216
252
|
let(:wrapped) { expect(receiver) }
|
217
253
|
end
|
254
|
+
it_behaves_like "resets partial mocks cleanly" do
|
255
|
+
let(:target) { expect(object) }
|
256
|
+
end
|
218
257
|
end
|
219
258
|
|
220
259
|
describe "expect_any_instance_of(...).to receive" do
|
221
|
-
|
222
|
-
|
223
|
-
include_examples "an expect syntax expectation", :does_not_report_line_num do
|
260
|
+
it_behaves_like "an expect syntax expectation", :does_not_report_line_num do
|
224
261
|
let(:klass) { Class.new }
|
225
262
|
let(:wrapped) { expect_any_instance_of(klass) }
|
226
263
|
let(:receiver) { klass.new }
|
227
264
|
end
|
265
|
+
it_behaves_like "resets partial mocks of any instance cleanly" do
|
266
|
+
let(:target) { expect_any_instance_of(klass) }
|
267
|
+
end
|
228
268
|
end
|
229
269
|
|
230
270
|
describe "expect(...).not_to receive" do
|
231
|
-
|
271
|
+
it_behaves_like "an expect syntax negative expectation" do
|
232
272
|
let(:receiver) { double }
|
233
273
|
let(:wrapped) { expect(receiver) }
|
234
274
|
end
|
235
275
|
end
|
236
276
|
|
237
277
|
describe "expect_any_instance_of(...).not_to receive" do
|
238
|
-
|
278
|
+
it_behaves_like "an expect syntax negative expectation" do
|
239
279
|
let(:klass) { Class.new }
|
240
280
|
let(:wrapped) { expect_any_instance_of(klass) }
|
241
281
|
let(:receiver) { klass.new }
|
@@ -246,7 +286,7 @@ module RSpec
|
|
246
286
|
it 'can use the `expect` syntax' do
|
247
287
|
dbl = double
|
248
288
|
|
249
|
-
framework.new.
|
289
|
+
framework.new.instance_exec do
|
250
290
|
expect(dbl).to receive(:foo).and_return(3)
|
251
291
|
end
|
252
292
|
|
@@ -256,7 +296,7 @@ module RSpec
|
|
256
296
|
it 'expects the method to be called when `expect` is used' do
|
257
297
|
dbl = double
|
258
298
|
|
259
|
-
framework.new.
|
299
|
+
framework.new.instance_exec do
|
260
300
|
expect(dbl).to receive(:foo)
|
261
301
|
end
|
262
302
|
|
@@ -266,7 +306,7 @@ module RSpec
|
|
266
306
|
it 'supports `expect(...).not_to receive`' do
|
267
307
|
dbl = double
|
268
308
|
|
269
|
-
framework.new.
|
309
|
+
framework.new.instance_exec do
|
270
310
|
expect(dbl).not_to receive(:foo)
|
271
311
|
end
|
272
312
|
|
@@ -276,7 +316,7 @@ module RSpec
|
|
276
316
|
it 'supports `expect(...).to_not receive`' do
|
277
317
|
dbl = double
|
278
318
|
|
279
|
-
framework.new.
|
319
|
+
framework.new.instance_exec do
|
280
320
|
expect(dbl).to_not receive(:foo)
|
281
321
|
end
|
282
322
|
|
@@ -295,14 +335,14 @@ module RSpec
|
|
295
335
|
end
|
296
336
|
end
|
297
337
|
|
298
|
-
|
338
|
+
it_behaves_like "using rspec-mocks in another test framework"
|
299
339
|
|
300
340
|
it 'cannot use `expect` with another matcher' do
|
301
341
|
expect {
|
302
|
-
framework.new.
|
342
|
+
framework.new.instance_exec do
|
303
343
|
expect(3).to eq(3)
|
304
344
|
end
|
305
|
-
}.to raise_error(/only the `receive`
|
345
|
+
}.to raise_error(/only the `receive` or `receive_messages` matchers are supported with `expect\(...\).to`/)
|
306
346
|
end
|
307
347
|
|
308
348
|
it 'can toggle the available syntax' do
|
@@ -319,7 +359,7 @@ module RSpec
|
|
319
359
|
context "when rspec-expectations is included in the test framework first" do
|
320
360
|
before do
|
321
361
|
# the examples here assume `expect` is define in RSpec::Matchers...
|
322
|
-
expect(RSpec::Matchers.method_defined?(:expect)).to
|
362
|
+
expect(RSpec::Matchers.method_defined?(:expect)).to be_truthy
|
323
363
|
end
|
324
364
|
|
325
365
|
let(:framework) do
|
@@ -329,10 +369,10 @@ module RSpec
|
|
329
369
|
end
|
330
370
|
end
|
331
371
|
|
332
|
-
|
372
|
+
it_behaves_like "using rspec-mocks in another test framework"
|
333
373
|
|
334
374
|
it 'can use `expect` with any matcher' do
|
335
|
-
framework.new.
|
375
|
+
framework.new.instance_exec do
|
336
376
|
expect(3).to eq(3)
|
337
377
|
end
|
338
378
|
end
|
@@ -341,7 +381,7 @@ module RSpec
|
|
341
381
|
context "when rspec-expectations is included in the test framework last" do
|
342
382
|
before do
|
343
383
|
# the examples here assume `expect` is define in RSpec::Matchers...
|
344
|
-
expect(RSpec::Matchers.method_defined?(:expect)).to
|
384
|
+
expect(RSpec::Matchers.method_defined?(:expect)).to be_truthy
|
345
385
|
end
|
346
386
|
|
347
387
|
let(:framework) do
|
@@ -351,10 +391,10 @@ module RSpec
|
|
351
391
|
end
|
352
392
|
end
|
353
393
|
|
354
|
-
|
394
|
+
it_behaves_like "using rspec-mocks in another test framework"
|
355
395
|
|
356
396
|
it 'can use `expect` with any matcher' do
|
357
|
-
framework.new.
|
397
|
+
framework.new.instance_exec do
|
358
398
|
expect(3).to eq(3)
|
359
399
|
end
|
360
400
|
end
|
@@ -2,7 +2,8 @@ require 'spec_helper'
|
|
2
2
|
|
3
3
|
module RSpec
|
4
4
|
module Mocks
|
5
|
-
describe '
|
5
|
+
describe 'MockExpectationError' do
|
6
|
+
|
6
7
|
class Foo
|
7
8
|
def self.foo
|
8
9
|
bar
|
@@ -10,8 +11,8 @@ module RSpec
|
|
10
11
|
end
|
11
12
|
end
|
12
13
|
|
13
|
-
it '
|
14
|
-
Foo.
|
14
|
+
it 'is not caught by StandardError rescue blocks' do
|
15
|
+
expect(Foo).not_to receive(:bar)
|
15
16
|
expect {
|
16
17
|
Foo.foo
|
17
18
|
}.to raise_error(RSpec::Mocks::MockExpectationError)
|
@@ -16,6 +16,17 @@ module RSpec
|
|
16
16
|
@double.three
|
17
17
|
end
|
18
18
|
|
19
|
+
it "passes when messages are received in order" do
|
20
|
+
@double.stub(:something)
|
21
|
+
@double.should_receive(:one).ordered
|
22
|
+
@double.should_receive(:two).ordered
|
23
|
+
@double.should_receive(:three).at_least(:once).ordered
|
24
|
+
@double.one
|
25
|
+
@double.two
|
26
|
+
@double.three
|
27
|
+
@double.three
|
28
|
+
end
|
29
|
+
|
19
30
|
it "passes when messages are received in order across objects" do
|
20
31
|
a = double("a")
|
21
32
|
b = double("b")
|
@@ -9,7 +9,6 @@ module RSpec
|
|
9
9
|
let(:dbl_2) { Object.new }
|
10
10
|
|
11
11
|
before do
|
12
|
-
space.outside_example = false
|
13
12
|
space.ensure_registered(dbl_1)
|
14
13
|
space.ensure_registered(dbl_2)
|
15
14
|
end
|
@@ -98,6 +97,16 @@ module RSpec
|
|
98
97
|
expect(r1).to be(r2)
|
99
98
|
expect(r1).not_to be(r3)
|
100
99
|
end
|
100
|
+
|
101
|
+
it 'removes an any_instance_recorder when requested' do
|
102
|
+
klass = Class.new
|
103
|
+
|
104
|
+
space.any_instance_recorder_for(klass)
|
105
|
+
|
106
|
+
expect {
|
107
|
+
space.remove_any_instance_recorder_for(klass)
|
108
|
+
}.to change { space.any_instance_recorders.size }.by(-1)
|
109
|
+
end
|
101
110
|
end
|
102
111
|
end
|
103
112
|
end
|
@@ -2,35 +2,16 @@ require 'spec_helper'
|
|
2
2
|
|
3
3
|
module RSpec
|
4
4
|
module Mocks
|
5
|
-
describe
|
6
|
-
before { allow_deprecation }
|
7
|
-
|
8
|
-
it 'returns a reference to Double' do
|
9
|
-
expect(RSpec::Mocks::Mock).to be(RSpec::Mocks::Double)
|
10
|
-
end
|
11
|
-
|
12
|
-
it 'prints a deprecation warning' do
|
13
|
-
expect_deprecation_with_call_site(__FILE__, __LINE__ + 1)
|
14
|
-
RSpec::Mocks::Mock
|
15
|
-
end
|
16
|
-
|
17
|
-
it 'does not clobber the normal const missing behavior' do
|
18
|
-
expect {
|
19
|
-
RSpec::Mocks::AZBYCX
|
20
|
-
}.to raise_error(NameError, /RSpec::Mocks::AZBYCX/)
|
21
|
-
end
|
22
|
-
end
|
23
|
-
|
24
|
-
describe Double do
|
5
|
+
describe Mock do
|
25
6
|
before(:each) { @double = double("test double") }
|
26
7
|
after(:each) { reset @double }
|
27
8
|
|
28
9
|
it "has method_missing as private" do
|
29
|
-
expect(RSpec::Mocks::
|
10
|
+
expect(RSpec::Mocks::Mock.private_instance_methods).to include_method(:method_missing)
|
30
11
|
end
|
31
12
|
|
32
13
|
it "does not respond_to? method_missing (because it's private)" do
|
33
|
-
expect(RSpec::Mocks::
|
14
|
+
expect(RSpec::Mocks::Mock.new).not_to respond_to(:method_missing)
|
34
15
|
end
|
35
16
|
|
36
17
|
it "reports line number of expectation of unreceived message" do
|
@@ -67,28 +48,18 @@ module RSpec
|
|
67
48
|
}.to raise_error(/trying to negate it again/)
|
68
49
|
end
|
69
50
|
|
70
|
-
|
71
|
-
expect
|
72
|
-
|
73
|
-
|
74
|
-
it "warns when `should_not_receive().and_return` is used" do
|
75
|
-
expect_and_return_warning
|
76
|
-
@double.should_not_receive(:foo).and_return(1)
|
77
|
-
end
|
78
|
-
|
79
|
-
it "warns when `should_receive().never.and_return` is used" do
|
80
|
-
expect_and_return_warning
|
81
|
-
@double.should_receive(:foo).never.and_return(1)
|
82
|
-
end
|
51
|
+
it "warns when `and_return` is called on a negative expectation" do
|
52
|
+
expect {
|
53
|
+
@double.should_not_receive(:do_something).and_return(1)
|
54
|
+
}.to raise_error(/not supported/)
|
83
55
|
|
84
|
-
|
85
|
-
|
86
|
-
|
87
|
-
end
|
56
|
+
expect {
|
57
|
+
expect(@double).not_to receive(:do_something).and_return(1)
|
58
|
+
}.to raise_error(/not supported/)
|
88
59
|
|
89
|
-
|
90
|
-
|
91
|
-
|
60
|
+
expect {
|
61
|
+
expect(@double).to receive(:do_something).never.and_return(1)
|
62
|
+
}.to raise_error(/not supported/)
|
92
63
|
end
|
93
64
|
|
94
65
|
it "passes when receiving message specified as not to be received with different args" do
|
@@ -161,7 +132,6 @@ module RSpec
|
|
161
132
|
end
|
162
133
|
|
163
134
|
it "allows block to calculate return values" do
|
164
|
-
allow_deprecation
|
165
135
|
@double.should_receive(:something).with("a","b","c").and_return { |a,b,c| c+b+a }
|
166
136
|
expect(@double.something("a","b","c")).to eq "cba"
|
167
137
|
verify @double
|
@@ -254,7 +224,7 @@ module RSpec
|
|
254
224
|
|
255
225
|
it "fails if expectation block fails" do
|
256
226
|
@double.should_receive(:something) do |bool|
|
257
|
-
expect(bool).to
|
227
|
+
expect(bool).to be_truthy
|
258
228
|
end
|
259
229
|
|
260
230
|
expect {
|
@@ -287,28 +257,19 @@ module RSpec
|
|
287
257
|
@double.foo { :bar }
|
288
258
|
end
|
289
259
|
|
290
|
-
|
291
|
-
|
292
|
-
|
293
|
-
|
294
|
-
eval("@double.should_receive(:foo) {|&block| expect(block.call).to eq(:bar)}")
|
295
|
-
@double.foo { :bar }
|
296
|
-
end
|
297
|
-
|
298
|
-
it "passes proc to expectation block with an argument" do
|
299
|
-
eval("@double.should_receive(:foo) {|arg, &block| expect(block.call).to eq(:bar)}")
|
300
|
-
@double.foo(:arg) { :bar }
|
301
|
-
end
|
260
|
+
it "passes proc to expectation block with an argument" do
|
261
|
+
@double.should_receive(:foo) { |arg, &block| expect(block.call).to eq(:bar) }
|
262
|
+
@double.foo(:arg) { :bar }
|
263
|
+
end
|
302
264
|
|
303
|
-
|
304
|
-
|
305
|
-
|
306
|
-
|
265
|
+
it "passes proc to stub block without an argurment" do
|
266
|
+
@double.stub(:foo) { |&block| expect(block.call).to eq(:bar) }
|
267
|
+
@double.foo { :bar }
|
268
|
+
end
|
307
269
|
|
308
|
-
|
309
|
-
|
310
|
-
|
311
|
-
end
|
270
|
+
it "passes proc to stub block with an argument" do
|
271
|
+
@double.stub(:foo) { |arg, &block| expect(block.call).to eq(:bar) }
|
272
|
+
@double.foo(:arg) { :bar }
|
312
273
|
end
|
313
274
|
|
314
275
|
it "fails right away when method defined as never is received" do
|
@@ -651,7 +612,7 @@ module RSpec
|
|
651
612
|
end
|
652
613
|
|
653
614
|
it "assigns stub return values" do
|
654
|
-
double = RSpec::Mocks::
|
615
|
+
double = RSpec::Mocks::Mock.new('name', :message => :response)
|
655
616
|
expect(double.message).to eq :response
|
656
617
|
end
|
657
618
|
|
@@ -709,16 +670,6 @@ module RSpec
|
|
709
670
|
expect(@calls).to eq 10
|
710
671
|
end
|
711
672
|
|
712
|
-
it "calls the block after #any_number_of_times" do
|
713
|
-
expect(RSpec).to receive(:deprecate).with("any_number_of_times", :replacement => "stub")
|
714
|
-
|
715
|
-
@double.should_receive(:foo).any_number_of_times { add_call }
|
716
|
-
|
717
|
-
(1..7).each { @double.foo }
|
718
|
-
|
719
|
-
expect(@calls).to eq 7
|
720
|
-
end
|
721
|
-
|
722
673
|
it "calls the block after #ordered" do
|
723
674
|
@double.should_receive(:foo).ordered { add_call }
|
724
675
|
@double.should_receive(:bar).ordered { add_call }
|
@@ -776,13 +727,6 @@ module RSpec
|
|
776
727
|
@double.should_receive(:foo).with('bar')
|
777
728
|
@double.foo('bar')
|
778
729
|
end
|
779
|
-
|
780
|
-
it 'includes callsite in deprecation when called without arguments' do
|
781
|
-
obj = Object.new
|
782
|
-
expect_deprecation_with_call_site(__FILE__, __LINE__ + 1, /Using `with` without arguments/)
|
783
|
-
obj.stub(:foo).with().and_return('bar')
|
784
|
-
expect(obj.foo).to eq('bar')
|
785
|
-
end
|
786
730
|
end
|
787
731
|
|
788
732
|
context "with non-matching args" do
|