-
-
Notifications
You must be signed in to change notification settings - Fork 358
/
block_return_value_spec.rb
99 lines (85 loc) · 2.84 KB
/
block_return_value_spec.rb
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
require "spec_helper"
describe "a double declaration with a block handed to:" do
# The "receives a block" part is important: 1.8.7 has a bug that reports the
# wrong arity when a block receives a block.
it 'forwards all given args to the block, even when it receives a block', :unless => RUBY_VERSION.to_s == '1.8.6' do
obj = Object.new
yielded_args = []
eval("obj.stub(:foo) { |*args, &bl| yielded_args << args }")
obj.foo(1, 2, 3)
expect(yielded_args).to eq([[1, 2, 3]])
end
describe "should_receive" do
it "returns the value of executing the block" do
obj = Object.new
obj.should_receive(:foo) { 'bar' }
expect(obj.foo).to eq('bar')
end
it "works when a multi-return stub has already been set" do
obj = Object.new
return_value = Object.new
obj.stub(:foo).and_return(return_value, nil)
obj.should_receive(:foo) { return_value }
expect(obj.foo).to be(return_value)
end
end
describe "stub" do
it "returns the value of executing the block" do
obj = Object.new
obj.stub(:foo) { 'bar' }
expect(obj.foo).to eq('bar')
end
it "does not complain if a lambda block and mismatched arguments are passed" do
obj = Object.new
obj.stub(:foo, &lambda { 'bar' })
expect(obj.foo(1, 2)).to eq('bar')
end
end
describe "with" do
it "returns the value of executing the block" do
obj = Object.new
obj.stub(:foo).with('baz') { 'bar' }
expect(obj.foo('baz')).to eq('bar')
end
it "does not complain if a lambda block and mismatched arguments are passed" do
obj = Object.new
obj.stub(:foo).with(1, 2, &lambda { 'bar' })
expect(obj.foo(1, 2)).to eq('bar')
end
end
%w[once twice ordered and_return].each do |method|
describe method do
it "returns the value of executing the block" do
obj = Object.new
obj.stub(:foo).send(method) { 'bar' }
expect(obj.foo).to eq('bar')
end
it "does not complain if a lambda block and mismatched arguments are passed" do
obj = Object.new
obj.stub(:foo).send(method, &lambda { 'bar' })
expect(obj.foo(1, 2)).to eq('bar')
end
end
end
describe 'any_number_of_times' do
before do
RSpec.stub(:deprecate)
end
it "warns about deprecation" do
expect(RSpec).to receive(:deprecate).with("any_number_of_times", :replacement => "stub")
Object.new.stub(:foo).any_number_of_times { 'bar' }
end
it "returns the value of executing the block" do
obj = Object.new
obj.stub(:foo).any_number_of_times { 'bar' }
expect(obj.foo).to eq('bar')
end
end
describe "times" do
it "returns the value of executing the block" do
obj = Object.new
obj.stub(:foo).at_least(1).times { 'bar' }
expect(obj.foo('baz')).to eq('bar')
end
end
end