-
Notifications
You must be signed in to change notification settings - Fork 0
/
creating_stubs_spec.rb
95 lines (76 loc) · 3.02 KB
/
creating_stubs_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
require File.join(File.expand_path(File.dirname(__FILE__)), 'shared_spec')
describe 'Creating Stubs' do
each_cache_store do |store_type|
%w{current other}.each do |mode|
%w{AnyClass AnyModule AnyClass::Inner AnyModule::Inner}.each do |descriptor|
describe '>> %s process using :%s store (%s)' % [mode, store_type, descriptor] do
before do
@descriptor = descriptor
@klass = klassify(descriptor)
@store_type = store_type
end
behaves_like "has #{mode} process setup"
should "create with hash argument(s)" do
@klass.xstub(:bang => 'OOPS', :say => 'HELLO')
@call["#{@descriptor}.bang"].should.equal 'OOPS'
@call["#{@descriptor}.say"].should.equal 'HELLO'
end
should "create with symbol argument(s)" do
@klass.xstub(:bang)
@call["#{@descriptor}.bang"].should.equal nil
end
should "create with block with no argument" do
@klass.xstub do
def bang ; 'OOPS' ; end
end
@call["#{@descriptor}.bang"].should.equal 'OOPS'
end
should "create with symbol & block with no argument" do
@klass.xstub(:bang) do
def say
'HELLO'
end
end
@call["#{@descriptor}.bang"].should.equal nil
@call["#{@descriptor}.say"].should.equal 'HELLO'
end
should "create with hash & block with no argument" do
@klass.xstub(:bang => 'OOPS') do
def say
'HELLO'
end
end
@call["#{@descriptor}.bang"].should.equal 'OOPS'
@call["#{@descriptor}.say"].should.equal 'HELLO'
end
should "always create the most recent" do
found, expected = [], ['OOPS', 'OOOPS', 'OOOOPS']
stub_and_get_value = lambda do |value|
@klass.xstub(:bang => value)
@call["#{@descriptor}.bang"]
end
found << stub_and_get_value[expected[0]]
found << stub_and_get_value[expected[1]]
CrossStub.clear
CrossStub.setup(cache_store(@store_type))
found << stub_and_get_value[expected[2]]
found.should.equal expected
end
should "create stub with dependency on other stub" do
@klass.xstub(:something => 'HELLO') do
def do_action(who, action)
%\#{who} #{action} #{something}\
end
end
@call["#{@descriptor}.do_action.i.say"].should.equal 'i say HELLO'
end
should "create for method not implemented in ruby" do
now = Time.now - 365*60*60*24
Time.xstub(:now => now)
@call['Time.now'].should.equal now
end
end
end
end
end
end