spy 0.4.5 → 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.
- checksums.yaml +5 -5
- data/.travis.yml +5 -5
- data/CHANGELOG.md +3 -2
- data/README.md +3 -2
- data/Rakefile +1 -1
- data/lib/spy/subroutine.rb +12 -0
- data/lib/spy/version.rb +1 -1
- data/spy.gemspec +4 -2
- data/test/spy/test_mock.rb +2 -2
- data/test/spy/test_subroutine.rb +36 -4
- data/test/support/pen.rb +15 -5
- data/test/test_helper.rb +2 -0
- metadata +33 -6
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
|
-
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
2
|
+
SHA256:
|
3
|
+
metadata.gz: cc1c3954f26350a18af51b75fd2400d06600c859ba9e4675a2ddfb5b983f8a8d
|
4
|
+
data.tar.gz: e535c67bdf68ba225c6cfb98f3182c53004de5452e27eb3d3476deaa16369956
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 6d6fb00c5cdc3e0f435f24ffdff53921fa8578f69a004c0b995fda335b69a694a4ea06fe61541d66fb0d40c0a52303d197ceec5b429bec102c09828da19082a4
|
7
|
+
data.tar.gz: 16de7875661311fa5d6ca327ff4510751e88d743e672e937492a8d4abcbd11599f12df9667965c2e5434a5bd6b5725c12caf4c781672fac033ce6c51b5746dbe
|
data/.travis.yml
CHANGED
data/CHANGELOG.md
CHANGED
data/README.md
CHANGED
@@ -9,7 +9,8 @@
|
|
9
9
|
|
10
10
|
Spy is a lightweight stubbing framework with support for method spies, constant stubs, and object mocks.
|
11
11
|
|
12
|
-
Spy
|
12
|
+
Spy supports ruby 2.1.0+.
|
13
|
+
For versions less than 2.1 use v0.4.5
|
13
14
|
|
14
15
|
Spy features that were completed were tested against the rspec-mocks tests so it covers all cases that rspec-mocks does.
|
15
16
|
|
@@ -197,7 +198,7 @@ In your test file
|
|
197
198
|
```ruby
|
198
199
|
def test_title
|
199
200
|
book = Book.new
|
200
|
-
title_spy = Spy.on(book, title)
|
201
|
+
title_spy = Spy.on(book, :title)
|
201
202
|
book.title
|
202
203
|
book.title
|
203
204
|
|
data/Rakefile
CHANGED
data/lib/spy/subroutine.rb
CHANGED
@@ -32,6 +32,7 @@ module Spy
|
|
32
32
|
def initialize(object, method_name, singleton_method = true)
|
33
33
|
@base_object, @method_name = object, method_name
|
34
34
|
@singleton_method = singleton_method
|
35
|
+
@plan = nil
|
35
36
|
reset!
|
36
37
|
end
|
37
38
|
|
@@ -282,6 +283,8 @@ module Spy
|
|
282
283
|
@arity_range ||=
|
283
284
|
if original_method
|
284
285
|
min = max = 0
|
286
|
+
key_args = false
|
287
|
+
opt_keys = false
|
285
288
|
original_method.parameters.each do |type,_|
|
286
289
|
case type
|
287
290
|
when :req
|
@@ -291,8 +294,17 @@ module Spy
|
|
291
294
|
max += 1
|
292
295
|
when :rest
|
293
296
|
max = Float::INFINITY
|
297
|
+
when :keyreq
|
298
|
+
key_args = true
|
299
|
+
when :keyrest, :key
|
300
|
+
key_args = true
|
301
|
+
opt_keys = true
|
294
302
|
end
|
295
303
|
end
|
304
|
+
if key_args
|
305
|
+
max += 1
|
306
|
+
min += 1 unless opt_keys
|
307
|
+
end
|
296
308
|
(min..max)
|
297
309
|
end
|
298
310
|
end
|
data/lib/spy/version.rb
CHANGED
data/spy.gemspec
CHANGED
@@ -6,12 +6,12 @@ require 'spy/version'
|
|
6
6
|
Gem::Specification.new do |gem|
|
7
7
|
gem.name = "spy"
|
8
8
|
gem.version = Spy::VERSION
|
9
|
-
gem.required_ruby_version = '>= 1.
|
9
|
+
gem.required_ruby_version = '>= 2.1.0'
|
10
10
|
gem.license = 'MIT'
|
11
11
|
gem.authors = ["Ryan Ong"]
|
12
12
|
gem.email = ["ryanong@gmail.com"]
|
13
13
|
gem.summary = %q{A simple modern mocking library that uses the spy pattern and checks method's existence and arity.}
|
14
|
-
gem.description = %q{Spy is a mocking library that was made for the modern age. It supports only 1.
|
14
|
+
gem.description = %q{Spy is a mocking library that was made for the modern age. It supports only 2.1.0+. Spy by default will raise an error if you attempt to stub a method that doesn't exist or call the stubbed method with the wrong arity.}
|
15
15
|
gem.homepage = "https://github.com/ryanong/spy"
|
16
16
|
|
17
17
|
gem.files = `git ls-files`.split($/)
|
@@ -20,7 +20,9 @@ Gem::Specification.new do |gem|
|
|
20
20
|
gem.require_paths = ["lib"]
|
21
21
|
gem.add_development_dependency('pry')
|
22
22
|
gem.add_development_dependency('pry-nav')
|
23
|
+
gem.add_development_dependency('pry-stack_explorer')
|
23
24
|
gem.add_development_dependency('minitest', '>= 4.5.0')
|
25
|
+
gem.add_development_dependency('minitest-reporters')
|
24
26
|
gem.add_development_dependency('rspec-core')
|
25
27
|
gem.add_development_dependency('rspec-expectations')
|
26
28
|
gem.add_development_dependency('coveralls')
|
data/test/spy/test_mock.rb
CHANGED
@@ -68,6 +68,7 @@ module Spy
|
|
68
68
|
end
|
69
69
|
end
|
70
70
|
|
71
|
+
BUGGY_METHODS = %i(tap pretty_print_inspect trust untrust untrusted?)
|
71
72
|
def test_mocked_methods
|
72
73
|
pen_methods = Pen.public_instance_methods(false) +
|
73
74
|
Pen.protected_instance_methods(false) +
|
@@ -76,8 +77,7 @@ module Spy
|
|
76
77
|
assert_equal pen_methods.sort, @pen_mock.mocked_methods.sort
|
77
78
|
end
|
78
79
|
|
79
|
-
|
80
|
-
methods_to_test = Object.instance_methods - buggy_methods
|
80
|
+
methods_to_test = Object.instance_methods - BUGGY_METHODS
|
81
81
|
methods_to_test.each do |method_name|
|
82
82
|
object_method = Object.instance_method(method_name)
|
83
83
|
if object_method.arity == 0 || (RUBY_ENGINE != "jruby" && object_method.parameters == [])
|
data/test/spy/test_subroutine.rb
CHANGED
@@ -40,13 +40,13 @@ module Spy
|
|
40
40
|
end
|
41
41
|
|
42
42
|
def test_spy_can_hook_and_record_a_meta_method_call_on_a_constant
|
43
|
-
assert_equal "
|
44
|
-
meta_spy = spy_on(Pen, :
|
43
|
+
assert_equal "meta_class_method", Pen.meta_class_method
|
44
|
+
meta_spy = spy_on(Pen, :meta_class_method)
|
45
45
|
refute meta_spy.has_been_called?
|
46
|
-
assert_nil Pen.
|
46
|
+
assert_nil Pen.meta_class_method
|
47
47
|
assert meta_spy.has_been_called?
|
48
48
|
meta_spy.unhook
|
49
|
-
assert_equal "
|
49
|
+
assert_equal "meta_class_method", Pen.meta_class_method
|
50
50
|
end
|
51
51
|
|
52
52
|
def test_spy_can_hook_record_and_unhook_a_meta_method
|
@@ -199,6 +199,38 @@ module Spy
|
|
199
199
|
end
|
200
200
|
end
|
201
201
|
|
202
|
+
def test_that_method_spy_keeps_arity_with_optional_keyword_args
|
203
|
+
spy_on(@pen, :opt_kwargs)
|
204
|
+
@pen.opt_kwargs(:pos1)
|
205
|
+
@pen.opt_kwargs(:pos1, opt: 1, opt2: 2)
|
206
|
+
assert_raises ArgumentError do
|
207
|
+
@pen.opt_kwargs
|
208
|
+
end
|
209
|
+
assert_raises ArgumentError do
|
210
|
+
@pen.opt_kwargs(:pos1, :pos2, opt: 1)
|
211
|
+
end
|
212
|
+
end
|
213
|
+
|
214
|
+
def test_that_method_spy_keeps_arity_with_keyword_splat
|
215
|
+
spy_on(@pen, :keyrest)
|
216
|
+
@pen.keyrest
|
217
|
+
@pen.keyrest(a: 1, b: 2)
|
218
|
+
assert_raises ArgumentError do
|
219
|
+
@pen.keyrest(:pos1, :pos2)
|
220
|
+
end
|
221
|
+
end
|
222
|
+
|
223
|
+
def test_that_method_spy_keeps_arity_with_required_keyword_args
|
224
|
+
spy_on(@pen, :req_kwargs)
|
225
|
+
@pen.req_kwargs(req1: 1, req2: 2)
|
226
|
+
assert_raises ArgumentError do
|
227
|
+
@pen.req_kwargs
|
228
|
+
end
|
229
|
+
assert_raises ArgumentError do
|
230
|
+
@pen.req_kwargs(:pos1, :pos2)
|
231
|
+
end
|
232
|
+
end
|
233
|
+
|
202
234
|
def test_hook_mimics_public_visibility
|
203
235
|
spy_on(@pen, :public_method)
|
204
236
|
assert @pen.singleton_class.public_method_defined? :public_method
|
data/test/support/pen.rb
CHANGED
@@ -38,6 +38,18 @@ class Pen
|
|
38
38
|
"another"
|
39
39
|
end
|
40
40
|
|
41
|
+
def opt_kwargs(required, opt: nil, opt2: nil)
|
42
|
+
[required, opt: opt, opt2: opt2]
|
43
|
+
end
|
44
|
+
|
45
|
+
def keyrest(**kwargs)
|
46
|
+
kwargs
|
47
|
+
end
|
48
|
+
|
49
|
+
def req_kwargs(req1:, req2:)
|
50
|
+
[req1, req2]
|
51
|
+
end
|
52
|
+
|
41
53
|
protected
|
42
54
|
def protected_method
|
43
55
|
end
|
@@ -65,13 +77,11 @@ class Pen
|
|
65
77
|
end
|
66
78
|
end
|
67
79
|
|
68
|
-
|
69
|
-
|
70
|
-
Pen.define_singleton_method(:meta_method) do
|
71
|
-
another
|
80
|
+
Pen.define_singleton_method(:meta_class_method) do
|
81
|
+
"meta_class_method".freeze
|
72
82
|
end
|
73
83
|
|
74
84
|
Pen.send(:define_method, :meta_method) do
|
75
|
-
|
85
|
+
"meta_method".freeze
|
76
86
|
end
|
77
87
|
|
data/test/test_helper.rb
CHANGED
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: spy
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 1.0.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Ryan Ong
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2018-10-10 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: pry
|
@@ -38,6 +38,20 @@ dependencies:
|
|
38
38
|
- - ">="
|
39
39
|
- !ruby/object:Gem::Version
|
40
40
|
version: '0'
|
41
|
+
- !ruby/object:Gem::Dependency
|
42
|
+
name: pry-stack_explorer
|
43
|
+
requirement: !ruby/object:Gem::Requirement
|
44
|
+
requirements:
|
45
|
+
- - ">="
|
46
|
+
- !ruby/object:Gem::Version
|
47
|
+
version: '0'
|
48
|
+
type: :development
|
49
|
+
prerelease: false
|
50
|
+
version_requirements: !ruby/object:Gem::Requirement
|
51
|
+
requirements:
|
52
|
+
- - ">="
|
53
|
+
- !ruby/object:Gem::Version
|
54
|
+
version: '0'
|
41
55
|
- !ruby/object:Gem::Dependency
|
42
56
|
name: minitest
|
43
57
|
requirement: !ruby/object:Gem::Requirement
|
@@ -52,6 +66,20 @@ dependencies:
|
|
52
66
|
- - ">="
|
53
67
|
- !ruby/object:Gem::Version
|
54
68
|
version: 4.5.0
|
69
|
+
- !ruby/object:Gem::Dependency
|
70
|
+
name: minitest-reporters
|
71
|
+
requirement: !ruby/object:Gem::Requirement
|
72
|
+
requirements:
|
73
|
+
- - ">="
|
74
|
+
- !ruby/object:Gem::Version
|
75
|
+
version: '0'
|
76
|
+
type: :development
|
77
|
+
prerelease: false
|
78
|
+
version_requirements: !ruby/object:Gem::Requirement
|
79
|
+
requirements:
|
80
|
+
- - ">="
|
81
|
+
- !ruby/object:Gem::Version
|
82
|
+
version: '0'
|
55
83
|
- !ruby/object:Gem::Dependency
|
56
84
|
name: rspec-core
|
57
85
|
requirement: !ruby/object:Gem::Requirement
|
@@ -95,7 +123,7 @@ dependencies:
|
|
95
123
|
- !ruby/object:Gem::Version
|
96
124
|
version: '0'
|
97
125
|
description: Spy is a mocking library that was made for the modern age. It supports
|
98
|
-
only 1.
|
126
|
+
only 2.1.0+. Spy by default will raise an error if you attempt to stub a method
|
99
127
|
that doesn't exist or call the stubbed method with the wrong arity.
|
100
128
|
email:
|
101
129
|
- ryanong@gmail.com
|
@@ -162,7 +190,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
162
190
|
requirements:
|
163
191
|
- - ">="
|
164
192
|
- !ruby/object:Gem::Version
|
165
|
-
version: 1.
|
193
|
+
version: 2.1.0
|
166
194
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
167
195
|
requirements:
|
168
196
|
- - ">="
|
@@ -170,7 +198,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
170
198
|
version: '0'
|
171
199
|
requirements: []
|
172
200
|
rubyforge_project:
|
173
|
-
rubygems_version: 2.
|
201
|
+
rubygems_version: 2.7.6
|
174
202
|
signing_key:
|
175
203
|
specification_version: 4
|
176
204
|
summary: A simple modern mocking library that uses the spy pattern and checks method's
|
@@ -201,4 +229,3 @@ test_files:
|
|
201
229
|
- test/spy/test_subroutine.rb
|
202
230
|
- test/support/pen.rb
|
203
231
|
- test/test_helper.rb
|
204
|
-
has_rdoc:
|