not_a_mock 1.0.0
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.
- data/.gitignore +3 -0
- data/MIT-LICENSE +20 -0
- data/README.rdoc +82 -0
- data/Rakefile +38 -0
- data/TODO +49 -0
- data/VERSION +1 -0
- data/lib/not_a_mock/active_record_extensions.rb +12 -0
- data/lib/not_a_mock/argument_constraint_extensions.rb +32 -0
- data/lib/not_a_mock/call_recorder.rb +88 -0
- data/lib/not_a_mock/matchers/anything_matcher.rb +28 -0
- data/lib/not_a_mock/matchers/args_matcher.rb +74 -0
- data/lib/not_a_mock/matchers/call_matcher.rb +64 -0
- data/lib/not_a_mock/matchers/method_matcher.rb +29 -0
- data/lib/not_a_mock/matchers/result_matcher.rb +29 -0
- data/lib/not_a_mock/matchers/times_matcher.rb +46 -0
- data/lib/not_a_mock/matchers.rb +68 -0
- data/lib/not_a_mock/object_extensions.rb +105 -0
- data/lib/not_a_mock/rspec_mock_framework_adapter.rb +16 -0
- data/lib/not_a_mock/stub.rb +40 -0
- data/lib/not_a_mock/stubber.rb +69 -0
- data/lib/not_a_mock.rb +14 -0
- data/spec/call_recording_spec.rb +68 -0
- data/spec/matchers_spec.rb +217 -0
- data/spec/stub_active_record_spec.rb +29 -0
- data/spec/stub_instance_spec.rb +49 -0
- data/spec/stub_method_spec.rb +242 -0
- metadata +85 -0
@@ -0,0 +1,242 @@
|
|
1
|
+
$LOAD_PATH.unshift File.dirname(__FILE__) + '/../lib'
|
2
|
+
require 'not_a_mock'
|
3
|
+
|
4
|
+
describe "A stubbed method replacing an existing instance method" do
|
5
|
+
|
6
|
+
before do
|
7
|
+
@object = "Hello, world!"
|
8
|
+
@object.stub_method(:length => 42)
|
9
|
+
end
|
10
|
+
|
11
|
+
it "should return the stubbed result" do
|
12
|
+
@object.length.should == 42
|
13
|
+
end
|
14
|
+
|
15
|
+
it "should return the original result after stubbing is removed" do
|
16
|
+
@object.unstub_method(:length)
|
17
|
+
@object.length.should == 13
|
18
|
+
end
|
19
|
+
|
20
|
+
it "should return the original result after a reset" do
|
21
|
+
NotAMock::Stubber.instance.reset
|
22
|
+
@object.length.should == 13
|
23
|
+
end
|
24
|
+
|
25
|
+
it "should return the new result if re-stubbed" do
|
26
|
+
@object.stub_method(:length => 24)
|
27
|
+
@object.length.should == 24
|
28
|
+
end
|
29
|
+
|
30
|
+
it "should record a call to the stubbed method" do
|
31
|
+
@object.length
|
32
|
+
NotAMock::CallRecorder.instance.calls.should include(:object => @object, :method => :length, :args => [], :result => 42)
|
33
|
+
end
|
34
|
+
|
35
|
+
it "should return a call to the stubbed method if re-stubbed" do
|
36
|
+
@object.stub_method(:length => 24)
|
37
|
+
@object.length
|
38
|
+
NotAMock::CallRecorder.instance.calls.should include(:object => @object, :method => :length, :args => [], :result => 24)
|
39
|
+
end
|
40
|
+
|
41
|
+
after do
|
42
|
+
NotAMock::CallRecorder.instance.reset
|
43
|
+
NotAMock::Stubber.instance.reset
|
44
|
+
end
|
45
|
+
|
46
|
+
end
|
47
|
+
|
48
|
+
describe "A stubbed method with no existing instance method" do
|
49
|
+
|
50
|
+
before do
|
51
|
+
@object = "Hello, world!"
|
52
|
+
@object.stub_method(:blah => 42)
|
53
|
+
end
|
54
|
+
|
55
|
+
it "should return the stubbed result" do
|
56
|
+
@object.blah.should == 42
|
57
|
+
end
|
58
|
+
|
59
|
+
it "should raise a NoMethodError when the method is called after stubbing is removed" do
|
60
|
+
@object.unstub_method(:blah)
|
61
|
+
lambda { @object.blah }.should raise_error(NoMethodError)
|
62
|
+
end
|
63
|
+
|
64
|
+
it "should raise a NoMethodError when the method is called after all stubbing is removed" do
|
65
|
+
NotAMock::Stubber.instance.reset
|
66
|
+
lambda { @object.blah }.should raise_error(NoMethodError)
|
67
|
+
end
|
68
|
+
|
69
|
+
it "should record a call to the stubbed method" do
|
70
|
+
@object.blah
|
71
|
+
NotAMock::CallRecorder.instance.calls.should include(:object => @object, :method => :blah, :args => [], :result => 42)
|
72
|
+
end
|
73
|
+
|
74
|
+
after do
|
75
|
+
NotAMock::CallRecorder.instance.reset
|
76
|
+
NotAMock::Stubber.instance.reset
|
77
|
+
end
|
78
|
+
|
79
|
+
end
|
80
|
+
|
81
|
+
describe "A stubbed class method" do
|
82
|
+
|
83
|
+
before do
|
84
|
+
Time.stub_method(:now => 42)
|
85
|
+
end
|
86
|
+
|
87
|
+
it "should return the stubbed result" do
|
88
|
+
Time.now.should == 42
|
89
|
+
end
|
90
|
+
|
91
|
+
it "should return the original result after stubbing is removed" do
|
92
|
+
Time.unstub_method(:now)
|
93
|
+
Time.now.should_not == 42
|
94
|
+
end
|
95
|
+
|
96
|
+
it "should return the original result after a reset" do
|
97
|
+
NotAMock::Stubber.instance.reset
|
98
|
+
Time.now.should_not == 42
|
99
|
+
end
|
100
|
+
|
101
|
+
after do
|
102
|
+
NotAMock::CallRecorder.instance.reset
|
103
|
+
NotAMock::Stubber.instance.reset
|
104
|
+
end
|
105
|
+
|
106
|
+
end
|
107
|
+
|
108
|
+
describe "A stubbed private method" do
|
109
|
+
before do
|
110
|
+
class Privateer
|
111
|
+
private
|
112
|
+
|
113
|
+
def self.stubbed
|
114
|
+
false
|
115
|
+
end
|
116
|
+
end
|
117
|
+
|
118
|
+
Privateer.stub_method(:stubbed => true)
|
119
|
+
end
|
120
|
+
|
121
|
+
it "should return the stubbed result" do
|
122
|
+
Privateer.send(:stubbed).should be_true
|
123
|
+
end
|
124
|
+
|
125
|
+
it "should return the original result after stubbing is removed" do
|
126
|
+
Privateer.unstub_method(:stubbed)
|
127
|
+
Privateer.send(:stubbed).should be_false
|
128
|
+
end
|
129
|
+
|
130
|
+
it "should return the original result after a reset" do
|
131
|
+
NotAMock::Stubber.instance.reset
|
132
|
+
Privateer.send(:stubbed).should be_false
|
133
|
+
end
|
134
|
+
|
135
|
+
after do
|
136
|
+
NotAMock::CallRecorder.instance.reset
|
137
|
+
NotAMock::Stubber.instance.reset
|
138
|
+
end
|
139
|
+
end
|
140
|
+
|
141
|
+
describe "A stubbed protected method" do
|
142
|
+
before :each do
|
143
|
+
class Protector
|
144
|
+
protected
|
145
|
+
|
146
|
+
def self.stubbed
|
147
|
+
false
|
148
|
+
end
|
149
|
+
end
|
150
|
+
|
151
|
+
Protector.stub_method(:stubbed => true)
|
152
|
+
end
|
153
|
+
|
154
|
+
it "should return the stubbed result" do
|
155
|
+
Protector.send(:stubbed).should be_true
|
156
|
+
end
|
157
|
+
|
158
|
+
it "should return the original result after stubbing is removed" do
|
159
|
+
Protector.unstub_method(:stubbed)
|
160
|
+
Protector.send(:stubbed).should be_false
|
161
|
+
end
|
162
|
+
|
163
|
+
it "should return the original result after a reset" do
|
164
|
+
NotAMock::Stubber.instance.reset
|
165
|
+
Protector.send(:stubbed).should be_false
|
166
|
+
end
|
167
|
+
|
168
|
+
after do
|
169
|
+
NotAMock::CallRecorder.instance.reset
|
170
|
+
NotAMock::Stubber.instance.reset
|
171
|
+
end
|
172
|
+
end
|
173
|
+
|
174
|
+
describe "A method stubbed with a block" do
|
175
|
+
|
176
|
+
before do
|
177
|
+
@object = "Hello, world!"
|
178
|
+
@object.stub_method(:length) do |*args|
|
179
|
+
args.reverse
|
180
|
+
end
|
181
|
+
end
|
182
|
+
|
183
|
+
it "should return the result of the block" do
|
184
|
+
@object.length(1, 2, 3).should == [3, 2, 1]
|
185
|
+
end
|
186
|
+
|
187
|
+
after do
|
188
|
+
NotAMock::CallRecorder.instance.reset
|
189
|
+
NotAMock::Stubber.instance.reset
|
190
|
+
end
|
191
|
+
|
192
|
+
end
|
193
|
+
|
194
|
+
describe "A method stubbed to raise an exception" do
|
195
|
+
|
196
|
+
before do
|
197
|
+
@object = "Hello, world!"
|
198
|
+
@object.stub_method_to_raise(:length => ArgumentError)
|
199
|
+
end
|
200
|
+
|
201
|
+
it "should raise the exception when called" do
|
202
|
+
lambda { @object.length }.should raise_error(ArgumentError)
|
203
|
+
end
|
204
|
+
|
205
|
+
it "should return the original result after stubbing is removed" do
|
206
|
+
@object.unstub_method(:length)
|
207
|
+
@object.length.should == 13
|
208
|
+
end
|
209
|
+
|
210
|
+
after do
|
211
|
+
NotAMock::CallRecorder.instance.reset
|
212
|
+
NotAMock::Stubber.instance.reset
|
213
|
+
end
|
214
|
+
|
215
|
+
end
|
216
|
+
|
217
|
+
describe "Object#stub_method" do
|
218
|
+
|
219
|
+
it "should stub a method with a name ending in '?'" do
|
220
|
+
@object = "Hello, world!"
|
221
|
+
@object.stub_method(:is_great? => true)
|
222
|
+
@object.is_great?.should be_true
|
223
|
+
end
|
224
|
+
|
225
|
+
it "should stub the []= method" do
|
226
|
+
@object = Array.new
|
227
|
+
@object.stub_method(:[]= => nil)
|
228
|
+
@object[0] = 7
|
229
|
+
@object.length.should == 0
|
230
|
+
end
|
231
|
+
|
232
|
+
it "should raise an ArgumentError if called with something other than a symbol or hash" do
|
233
|
+
@object = "Hello, world!"
|
234
|
+
lambda { @object.stub_method(7) }.should raise_error(ArgumentError)
|
235
|
+
end
|
236
|
+
|
237
|
+
after do
|
238
|
+
NotAMock::CallRecorder.instance.reset
|
239
|
+
NotAMock::Stubber.instance.reset
|
240
|
+
end
|
241
|
+
|
242
|
+
end
|
metadata
ADDED
@@ -0,0 +1,85 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: not_a_mock
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 1.0.0
|
5
|
+
platform: ruby
|
6
|
+
authors:
|
7
|
+
- Pete Yandell
|
8
|
+
autorequire:
|
9
|
+
bindir: bin
|
10
|
+
cert_chain: []
|
11
|
+
|
12
|
+
date: 2010-01-08 00:00:00 +11:00
|
13
|
+
default_executable:
|
14
|
+
dependencies: []
|
15
|
+
|
16
|
+
description:
|
17
|
+
email: pete@notahat.com
|
18
|
+
executables: []
|
19
|
+
|
20
|
+
extensions: []
|
21
|
+
|
22
|
+
extra_rdoc_files:
|
23
|
+
- README.rdoc
|
24
|
+
- TODO
|
25
|
+
files:
|
26
|
+
- .gitignore
|
27
|
+
- MIT-LICENSE
|
28
|
+
- README.rdoc
|
29
|
+
- Rakefile
|
30
|
+
- TODO
|
31
|
+
- VERSION
|
32
|
+
- lib/not_a_mock.rb
|
33
|
+
- lib/not_a_mock/active_record_extensions.rb
|
34
|
+
- lib/not_a_mock/argument_constraint_extensions.rb
|
35
|
+
- lib/not_a_mock/call_recorder.rb
|
36
|
+
- lib/not_a_mock/matchers.rb
|
37
|
+
- lib/not_a_mock/matchers/anything_matcher.rb
|
38
|
+
- lib/not_a_mock/matchers/args_matcher.rb
|
39
|
+
- lib/not_a_mock/matchers/call_matcher.rb
|
40
|
+
- lib/not_a_mock/matchers/method_matcher.rb
|
41
|
+
- lib/not_a_mock/matchers/result_matcher.rb
|
42
|
+
- lib/not_a_mock/matchers/times_matcher.rb
|
43
|
+
- lib/not_a_mock/object_extensions.rb
|
44
|
+
- lib/not_a_mock/rspec_mock_framework_adapter.rb
|
45
|
+
- lib/not_a_mock/stub.rb
|
46
|
+
- lib/not_a_mock/stubber.rb
|
47
|
+
- spec/call_recording_spec.rb
|
48
|
+
- spec/matchers_spec.rb
|
49
|
+
- spec/stub_active_record_spec.rb
|
50
|
+
- spec/stub_instance_spec.rb
|
51
|
+
- spec/stub_method_spec.rb
|
52
|
+
has_rdoc: true
|
53
|
+
homepage: http://notahat.com/not_a_mock
|
54
|
+
licenses: []
|
55
|
+
|
56
|
+
post_install_message:
|
57
|
+
rdoc_options:
|
58
|
+
- --charset=UTF-8
|
59
|
+
require_paths:
|
60
|
+
- lib
|
61
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
62
|
+
requirements:
|
63
|
+
- - ">="
|
64
|
+
- !ruby/object:Gem::Version
|
65
|
+
version: "0"
|
66
|
+
version:
|
67
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
68
|
+
requirements:
|
69
|
+
- - ">="
|
70
|
+
- !ruby/object:Gem::Version
|
71
|
+
version: "0"
|
72
|
+
version:
|
73
|
+
requirements: []
|
74
|
+
|
75
|
+
rubyforge_project:
|
76
|
+
rubygems_version: 1.3.5
|
77
|
+
signing_key:
|
78
|
+
specification_version: 3
|
79
|
+
summary: A cleaner and DRYer alternative to mocking and stubbing with RSpec
|
80
|
+
test_files:
|
81
|
+
- spec/call_recording_spec.rb
|
82
|
+
- spec/matchers_spec.rb
|
83
|
+
- spec/stub_active_record_spec.rb
|
84
|
+
- spec/stub_instance_spec.rb
|
85
|
+
- spec/stub_method_spec.rb
|