rspec-spy 0.0.3 → 0.1.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/README.md +22 -28
- data/lib/rspec/spy/version.rb +1 -1
- data/lib/rspec/spy.rb +3 -3
- data/lib/rspec-spy.rb +11 -3
- data/rspec-spy.gemspec +2 -0
- data/spec/rspec_spy_spec.rb +19 -23
- metadata +18 -9
- data/lib/rspec/core/spy_proxy.rb +0 -43
- data/lib/rspec/spy/example_group_methods.rb +0 -20
data/README.md
CHANGED
@@ -1,8 +1,9 @@
|
|
1
1
|
# RSpec::Spy
|
2
2
|
|
3
3
|
This gem allows you to write mock expectations in an AAA (Arrange-Act-Assert) fashion
|
4
|
-
with RSpec::Mocks. It does this by allowing you to declare examples
|
5
|
-
|
4
|
+
with RSpec::Mocks. It does this by allowing you to declare examples with `:spy => true`
|
5
|
+
or `:spy` (if you use `config.treat_symbols_as_metadata_keys_with_true_values = true`)
|
6
|
+
so that they are effectively executed before everything else. Here's a simple example:
|
6
7
|
|
7
8
|
``` ruby
|
8
9
|
describe "Example" do
|
@@ -12,14 +13,12 @@ describe "Example" do
|
|
12
13
|
collaborator.message
|
13
14
|
end
|
14
15
|
|
15
|
-
spy do
|
16
|
-
|
17
|
-
|
18
|
-
end
|
16
|
+
it "should receive a message", :spy => true do
|
17
|
+
collaborator.should_receive :message
|
18
|
+
end
|
19
19
|
|
20
|
-
|
21
|
-
|
22
|
-
end
|
20
|
+
it "should not receive other_message", :spy => true do
|
21
|
+
collaborator.should_not_receive :other_message
|
23
22
|
end
|
24
23
|
end
|
25
24
|
```
|
@@ -55,19 +54,18 @@ RSpec::Spy.strict_mode = true
|
|
55
54
|
|
56
55
|
## Usage
|
57
56
|
|
58
|
-
Just
|
57
|
+
Just tag your examples with `:spy => true` or `:spy` (if you use
|
58
|
+
`config.treat_symbols_as_metadata_keys_with_true_values = true`)
|
59
59
|
You should be able to use all of the functionality from rspec-mocks that you're
|
60
60
|
used to, including spying on class methods.
|
61
61
|
|
62
62
|
``` ruby
|
63
|
-
spy do
|
64
|
-
|
65
|
-
collaborator.should_receive :message
|
66
|
-
end
|
63
|
+
it "should receive message", :spy => true do
|
64
|
+
collaborator.should_receive :message
|
67
65
|
end
|
68
66
|
|
69
|
-
#
|
70
|
-
|
67
|
+
# with config.treat_symbols_as_metadata_keys_with_true_values = true
|
68
|
+
it "should receive message", :spy do
|
71
69
|
collaborator.should_receive :message
|
72
70
|
end
|
73
71
|
```
|
@@ -89,14 +87,12 @@ describe "what not to do" do
|
|
89
87
|
|
90
88
|
# These will fail because @collaborator is nil because this happens
|
91
89
|
# before the above before block
|
92
|
-
spy do
|
93
|
-
|
94
|
-
|
95
|
-
|
96
|
-
|
97
|
-
|
98
|
-
@collaborator.should_not_receive :other_message
|
99
|
-
end
|
90
|
+
it "should receive a message", :spy => true do
|
91
|
+
@collaborator.should_receive :message
|
92
|
+
end
|
93
|
+
|
94
|
+
it "should not receive other_message", :spy => true do
|
95
|
+
@collaborator.should_not_receive :other_message
|
100
96
|
end
|
101
97
|
end
|
102
98
|
```
|
@@ -121,10 +117,8 @@ describe "stubbing and mocking at the same time" do
|
|
121
117
|
@result.should == 5
|
122
118
|
end
|
123
119
|
|
124
|
-
spy do
|
125
|
-
|
126
|
-
collaborator.should_receive(:message).and_return(5)
|
127
|
-
end
|
120
|
+
it "should receive a message", :spy => true do
|
121
|
+
collaborator.should_receive(:message).and_return(5)
|
128
122
|
end
|
129
123
|
end
|
130
124
|
```
|
data/lib/rspec/spy/version.rb
CHANGED
data/lib/rspec/spy.rb
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
module RSpec
|
2
2
|
module Spy
|
3
3
|
class << self
|
4
|
-
attr_accessor :
|
4
|
+
attr_accessor :in_run_spy
|
5
5
|
attr_accessor :strict_mode
|
6
|
-
alias_method :
|
6
|
+
alias_method :in_run_spy?, :in_run_spy
|
7
7
|
alias_method :strict_mode?, :strict_mode
|
8
8
|
|
9
9
|
def ok_to_spy?
|
10
10
|
return true unless strict_mode?
|
11
|
-
|
11
|
+
in_run_spy?
|
12
12
|
end
|
13
13
|
end
|
14
14
|
end
|
data/lib/rspec-spy.rb
CHANGED
@@ -1,11 +1,19 @@
|
|
1
1
|
require 'rspec/spy/version'
|
2
2
|
require 'rspec/spy'
|
3
3
|
require 'rspec/spy/mock_methods'
|
4
|
-
|
4
|
+
|
5
|
+
RSpec::Core::Example.class_eval do
|
6
|
+
def run_spy
|
7
|
+
RSpec::Spy.in_run_spy = true
|
8
|
+
@example_group_instance.instance_eval &@example_block
|
9
|
+
RSpec::Spy.in_run_spy = false
|
10
|
+
@example_block = proc {}
|
11
|
+
end
|
12
|
+
end
|
5
13
|
|
6
14
|
RSpec.configure do |config|
|
7
|
-
config.before(:each) do |example|
|
8
|
-
example.
|
15
|
+
config.before(:each, :spy => true) do |example|
|
16
|
+
example.example.run_spy
|
9
17
|
end
|
10
18
|
end
|
11
19
|
|
data/rspec-spy.gemspec
CHANGED
data/spec/rspec_spy_spec.rb
CHANGED
@@ -16,24 +16,20 @@ describe RSpec::Spy do
|
|
16
16
|
Subject.new.go(collaborator)
|
17
17
|
end
|
18
18
|
|
19
|
-
spy do
|
20
|
-
|
21
|
-
|
22
|
-
end
|
19
|
+
it "should work with should_receive", :spy do
|
20
|
+
collaborator.should_receive :message
|
21
|
+
end
|
23
22
|
|
24
|
-
|
25
|
-
|
26
|
-
|
23
|
+
it "should work with multiple in one spy block", :spy do
|
24
|
+
collaborator.should_receive :message
|
25
|
+
end
|
27
26
|
|
28
|
-
|
29
|
-
|
30
|
-
end
|
27
|
+
it "should work with not", :spy do
|
28
|
+
collaborator.should_not_receive :other_message
|
31
29
|
end
|
32
30
|
|
33
|
-
spy do
|
34
|
-
|
35
|
-
collaborator.should_receive :message
|
36
|
-
end
|
31
|
+
specify "should work with specify", :spy do
|
32
|
+
collaborator.should_receive :message
|
37
33
|
end
|
38
34
|
end
|
39
35
|
|
@@ -45,10 +41,8 @@ describe RSpec::Spy do
|
|
45
41
|
end
|
46
42
|
|
47
43
|
context do
|
48
|
-
spy do
|
49
|
-
|
50
|
-
collaborator.should_receive :message
|
51
|
-
end
|
44
|
+
it "should work in nested contexts", :spy do
|
45
|
+
collaborator.should_receive :message
|
52
46
|
end
|
53
47
|
end
|
54
48
|
end
|
@@ -75,25 +69,27 @@ describe RSpec::Spy, "should_receive outside of spy block" do
|
|
75
69
|
end
|
76
70
|
end
|
77
71
|
|
78
|
-
describe RSpec::Spy, "
|
72
|
+
describe RSpec::Spy, "setting on context" do
|
79
73
|
let(:collaborator) { stub.as_null_object }
|
80
74
|
|
81
75
|
before do
|
82
76
|
Subject.new.go(collaborator)
|
83
77
|
end
|
84
78
|
|
85
|
-
|
86
|
-
|
79
|
+
context "spies", :spy do
|
80
|
+
it "should work" do
|
81
|
+
collaborator.should_receive :message
|
82
|
+
end
|
87
83
|
end
|
88
84
|
end
|
89
85
|
|
90
86
|
describe RSpec::Spy, "nil warning" do
|
91
|
-
|
87
|
+
it "should warn me if I try to should_receive on nil", :spy do
|
92
88
|
lambda { @unknown.should_receive :message }.should raise_error
|
93
89
|
lambda { @unknown.should_not_receive :message }.should raise_error
|
94
90
|
end
|
95
91
|
|
96
|
-
|
92
|
+
it "should not warn me if I allow message expectations on nil", :spy do
|
97
93
|
RSpec::Mocks::Proxy.allow_message_expectations_on_nil
|
98
94
|
lambda { @unknown.should_not_receive :message }.should_not raise_error
|
99
95
|
end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: rspec-spy
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0
|
4
|
+
version: 0.1.0
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -9,11 +9,11 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2012-04-
|
12
|
+
date: 2012-04-04 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: rspec
|
16
|
-
requirement: &
|
16
|
+
requirement: &70191611940020 !ruby/object:Gem::Requirement
|
17
17
|
none: false
|
18
18
|
requirements:
|
19
19
|
- - ~>
|
@@ -21,10 +21,10 @@ dependencies:
|
|
21
21
|
version: '2.0'
|
22
22
|
type: :runtime
|
23
23
|
prerelease: false
|
24
|
-
version_requirements: *
|
24
|
+
version_requirements: *70191611940020
|
25
25
|
- !ruby/object:Gem::Dependency
|
26
26
|
name: rspec-mocks
|
27
|
-
requirement: &
|
27
|
+
requirement: &70191611939520 !ruby/object:Gem::Requirement
|
28
28
|
none: false
|
29
29
|
requirements:
|
30
30
|
- - ~>
|
@@ -32,7 +32,18 @@ dependencies:
|
|
32
32
|
version: '2.0'
|
33
33
|
type: :runtime
|
34
34
|
prerelease: false
|
35
|
-
version_requirements: *
|
35
|
+
version_requirements: *70191611939520
|
36
|
+
- !ruby/object:Gem::Dependency
|
37
|
+
name: pry
|
38
|
+
requirement: &70191611939140 !ruby/object:Gem::Requirement
|
39
|
+
none: false
|
40
|
+
requirements:
|
41
|
+
- - ! '>='
|
42
|
+
- !ruby/object:Gem::Version
|
43
|
+
version: '0'
|
44
|
+
type: :development
|
45
|
+
prerelease: false
|
46
|
+
version_requirements: *70191611939140
|
36
47
|
description: Enables AAA testing for rspec-mock
|
37
48
|
email:
|
38
49
|
- aaronjensen@gmail.com
|
@@ -48,9 +59,7 @@ files:
|
|
48
59
|
- README.md
|
49
60
|
- Rakefile
|
50
61
|
- lib/rspec-spy.rb
|
51
|
-
- lib/rspec/core/spy_proxy.rb
|
52
62
|
- lib/rspec/spy.rb
|
53
|
-
- lib/rspec/spy/example_group_methods.rb
|
54
63
|
- lib/rspec/spy/mock_methods.rb
|
55
64
|
- lib/rspec/spy/version.rb
|
56
65
|
- rspec-spy.gemspec
|
@@ -79,7 +88,7 @@ rubyforge_project:
|
|
79
88
|
rubygems_version: 1.8.17
|
80
89
|
signing_key:
|
81
90
|
specification_version: 3
|
82
|
-
summary: rspec-spy-0.0
|
91
|
+
summary: rspec-spy-0.1.0
|
83
92
|
test_files:
|
84
93
|
- spec/rspec_spy_spec.rb
|
85
94
|
- spec/spec_helper.rb
|
data/lib/rspec/core/spy_proxy.rb
DELETED
@@ -1,43 +0,0 @@
|
|
1
|
-
# By putting this in lib/rspec/core it gets removed from the example file/line
|
2
|
-
# search so it can find a matching line from the backtrace
|
3
|
-
module RSpec
|
4
|
-
module Core
|
5
|
-
class SpyProxy
|
6
|
-
def initialize(example_group)
|
7
|
-
@example_group = example_group
|
8
|
-
end
|
9
|
-
|
10
|
-
def example_method(method, description, *args, &block)
|
11
|
-
@example_group.context do
|
12
|
-
let(:spy_setup) do
|
13
|
-
RSpec::Spy.in_spy_setup = true
|
14
|
-
instance_eval &block
|
15
|
-
RSpec::Spy.in_spy_setup = false
|
16
|
-
end
|
17
|
-
|
18
|
-
send(method, description, *args) do
|
19
|
-
end
|
20
|
-
end
|
21
|
-
end
|
22
|
-
|
23
|
-
[
|
24
|
-
:example,
|
25
|
-
:it,
|
26
|
-
:specify,
|
27
|
-
:focused,
|
28
|
-
:focus,
|
29
|
-
:pending,
|
30
|
-
:xexample,
|
31
|
-
:xit,
|
32
|
-
:xspecify
|
33
|
-
].each do |name|
|
34
|
-
module_eval(<<-END_RUBY, __FILE__, __LINE__)
|
35
|
-
def #{name}(desc=nil, *args, &block)
|
36
|
-
example_method(:#{name}, desc, *args, &block)
|
37
|
-
end
|
38
|
-
END_RUBY
|
39
|
-
end
|
40
|
-
end
|
41
|
-
end
|
42
|
-
end
|
43
|
-
|
@@ -1,20 +0,0 @@
|
|
1
|
-
require 'rspec/core/spy_proxy'
|
2
|
-
|
3
|
-
module RSpec
|
4
|
-
module Spy
|
5
|
-
module ExampleGroupMethods
|
6
|
-
def spy(&block)
|
7
|
-
proxy = RSpec::Core::SpyProxy.new(self)
|
8
|
-
|
9
|
-
if block
|
10
|
-
proxy.instance_eval(&block)
|
11
|
-
else
|
12
|
-
proxy
|
13
|
-
end
|
14
|
-
end
|
15
|
-
end
|
16
|
-
end
|
17
|
-
end
|
18
|
-
|
19
|
-
RSpec::Core::ExampleGroup.extend RSpec::Spy::ExampleGroupMethods
|
20
|
-
|