better_receive 0.4.1 → 0.5.0

Sign up to get free protection for your applications and to get access to all the features.
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA1:
3
+ metadata.gz: 2374b6397328e21d63f479e68e74a2dfdc843960
4
+ data.tar.gz: c4e755a254de947b2fe8bed0bcca4e390177a513
5
+ SHA512:
6
+ metadata.gz: 9c755925be275f776cb9e7bfc86372785b96fb96a348583b2d03252d4e4b4771f13ab7189652a6e498f7de6cbdc7937d87406c129a71b324fc4b8a00289412b8
7
+ data.tar.gz: 2692f614cf4c2803c7f24e91fa9fc92ec545c5e54432aadc9a943934155ac54900bcb0c16ee9cb25c0c82121811ff00d853bd4d786c281288fd1e84abc211085
data/.gitignore CHANGED
@@ -3,6 +3,7 @@
3
3
  .bundle
4
4
  .config
5
5
  .yardoc
6
+ .ruby-version
6
7
  Gemfile.lock
7
8
  InstalledFiles
8
9
  _yardoc
data/README.md CHANGED
@@ -20,6 +20,8 @@ foo.better_receive(:bar)
20
20
  foo.better_stub(bar: 1, baz: 2)
21
21
  # or
22
22
  Foo.any_instance.better_receive(:bar).with(:wibble)
23
+ # or
24
+ foo.better_not_receive(:bar_baz)
23
25
 
24
26
  ```
25
27
 
@@ -8,6 +8,10 @@ module BetterReceive
8
8
  Mock.new(self).assert_with(*args, &block)
9
9
  end
10
10
 
11
+ def better_not_receive(*args, &block)
12
+ Mock.new(self).assert_negative_with(*args, &block)
13
+ end
14
+
11
15
  def better_stub(*args, &block)
12
16
  Stub.new(self).assert_with(*args, &block)
13
17
  end
@@ -27,6 +27,11 @@ module BetterReceive
27
27
  any_instance_add_expectation selector, &block
28
28
  end
29
29
 
30
+ def any_instance_better_not_expect(selector, options, &block)
31
+ any_instance_should_respond_to selector
32
+ any_instance_add_negative_expectation selector, &block
33
+ end
34
+
30
35
  def any_instance_should_respond_to(selector)
31
36
  klass = subject.instance_variable_get(:@klass)
32
37
  unless klass.method_defined?(selector)
@@ -43,5 +48,14 @@ module BetterReceive
43
48
  subject.message_chains.add(selector, expectation_chain(selector, &block))
44
49
  end
45
50
 
51
+ def any_instance_add_negative_expectation(selector, &block)
52
+ RSpec::Mocks::space.add(subject)
53
+
54
+ subject.instance_variable_set(:@expectation_set, true)
55
+ subject.send(:observe!, selector)
56
+
57
+ subject.message_chains.add(selector, negative_expectation_chain(selector, &block))
58
+ end
59
+
46
60
  end
47
61
  end
@@ -2,6 +2,7 @@ module BetterReceive
2
2
  class Mock < Base
3
3
 
4
4
  def assert_with(selector, options={}, &block)
5
+ selector = selector.to_sym
5
6
  if subject_is_any_instance?
6
7
  any_instance_better_expect(selector, options, &block)
7
8
  else
@@ -10,6 +11,16 @@ module BetterReceive
10
11
  end
11
12
  end
12
13
 
14
+ def assert_negative_with(selector, options={}, &block)
15
+ selector = selector.to_sym
16
+ if subject_is_any_instance?
17
+ any_instance_better_not_expect(selector, options, &block)
18
+ else
19
+ subject.should respond_to selector
20
+ negative_mock_subject_method(selector, options, &block)
21
+ end
22
+ end
23
+
13
24
 
14
25
  private
15
26
 
@@ -18,6 +29,11 @@ module BetterReceive
18
29
  subject_mock_proxy.add_message_expectation(location, selector, options, &block)
19
30
  end
20
31
 
32
+ def negative_mock_subject_method(selector, options, &block)
33
+ location = options[:expected_from] || caller(1)[2]
34
+ subject_mock_proxy.add_negative_message_expectation(location, selector, &block)
35
+ end
36
+
21
37
  def expectation_chain(*args)
22
38
  if defined?(RSpec::Mocks::AnyInstance::PositiveExpectationChain)
23
39
  RSpec::Mocks::AnyInstance::PositiveExpectationChain.new(*args)
@@ -26,5 +42,13 @@ module BetterReceive
26
42
  end
27
43
  end
28
44
 
45
+ def negative_expectation_chain(*args)
46
+ if defined?(RSpec::Mocks::AnyInstance::NegativeExpectationChain)
47
+ RSpec::Mocks::AnyInstance::NegativeExpectationChain.new(*args)
48
+ else
49
+ RSpec::Mocks::AnyInstance::NegativeExpectationChain.new(*args)
50
+ end
51
+ end
52
+
29
53
  end
30
54
  end
@@ -15,6 +15,7 @@ module BetterReceive
15
15
  private
16
16
 
17
17
  def better_stub_method(selector, options, &block)
18
+ selector = selector.to_sym
18
19
  if subject_is_any_instance?
19
20
  any_instance_better_expect(selector, options, &block)
20
21
  else
@@ -1,3 +1,3 @@
1
1
  module BetterReceive
2
- BETTER_VERSION = "0.4.1"
2
+ BETTER_VERSION = "0.5.0"
3
3
  end
@@ -60,6 +60,15 @@ describe BetterReceive::Mock do
60
60
 
61
61
  br_mock.assert_with(:bar, passed: true, &block_param)
62
62
  end
63
+
64
+ it "converts the selector to a symbol if necessary" do
65
+ foo.should_receive(:send).with(:__mock_proxy).and_return(mock_proxy)
66
+ mock_proxy.should_receive(:add_message_expectation) do |*args, &block|
67
+ args[1].should == :bar
68
+ end
69
+
70
+ br_mock.assert_with('bar', passed: true, &block_param)
71
+ end
63
72
  end
64
73
 
65
74
  context "on .any_instance" do
@@ -99,4 +108,106 @@ describe BetterReceive::Mock do
99
108
  end
100
109
  end
101
110
  end
111
+
112
+ describe "#assert_negative_with" do
113
+ let(:foo) { Foo.new }
114
+ let(:br_mock) { BetterReceive::Mock.new(foo) }
115
+
116
+ it "raises an error if the method is not defined" do
117
+ expect {
118
+ br_mock.assert_negative_with :bar_baz
119
+ }.to raise_error(RSpec::Expectations::ExpectationNotMetError) { |error|
120
+ error.message.should =~ /to respond to :bar_baz/
121
+ }
122
+ end
123
+
124
+ context "when mocking" do
125
+ let(:mock_proxy) { double(RSpec::Mocks::Proxy) }
126
+
127
+ it "creates a mock proxy and adds an expectation to it" do
128
+ foo.should_receive(:send).with(:__mock_proxy).and_return(mock_proxy)
129
+ mock_proxy.should_receive(:add_negative_message_expectation)
130
+
131
+ br_mock.assert_negative_with :bar
132
+ end
133
+
134
+ it "returns an rspec message expectation(responds to additional matchers ('with', 'once'...))" do
135
+ foo.better_not_receive(:bar).should be_a RSpec::Mocks::NegativeMessageExpectation
136
+
137
+ expect {
138
+ foo.bar
139
+ }.to raise_error(RSpec::Mocks::MockExpectationError) { |error|
140
+ error.message.should include "received: 1 time"
141
+ }
142
+
143
+ br_mock.assert_negative_with(:bar).with('wibble')
144
+ expect {
145
+ foo.bar('wibble')
146
+ }.to raise_error(RSpec::Mocks::MockExpectationError) { |error|
147
+ error.message.should include "received: 1 time"
148
+ }
149
+
150
+ end
151
+
152
+ context "and passing arguments" do
153
+ let(:block_param) { Proc.new {} }
154
+ let(:options) { {passed: true} }
155
+
156
+ it "passes all arguments through to the mock_proxy" do
157
+ foo.should_receive(:send).with(:__mock_proxy).and_return(mock_proxy)
158
+ mock_proxy.should_receive(:add_negative_message_expectation) do |*args, &block|
159
+ args[1].should == :bar
160
+ block.should == block_param
161
+ end
162
+
163
+ br_mock.assert_negative_with(:bar, &block_param)
164
+ end
165
+
166
+ it "converts the selector to a symbol" do
167
+ foo.should_receive(:send).with(:__mock_proxy).and_return(mock_proxy)
168
+ mock_proxy.should_receive(:add_negative_message_expectation) do |*args, &block|
169
+ args[1].should == :bar
170
+ end
171
+
172
+ br_mock.assert_negative_with("bar", &block_param)
173
+ end
174
+ end
175
+
176
+ context "on .any_instance" do
177
+ let(:br_mock) { BetterReceive::Mock.new(Foo.any_instance) }
178
+
179
+ context "when the method is defined" do
180
+ context "and the method is called" do
181
+ it 'raises when called' do
182
+ expect {
183
+ br_mock.assert_negative_with(:bar)
184
+ foo.bar
185
+ }.to raise_error(RSpec::Mocks::MockExpectationError) { |error|
186
+ error.message.should include "received: 1 time"
187
+ }
188
+ end
189
+ end
190
+
191
+ context 'and the method is not called' do
192
+ it 'does not raise an error' do
193
+ expect {
194
+ br_mock.assert_negative_with(:bar)
195
+ RSpec::Mocks::space.verify_all
196
+ }.to_not raise_error
197
+ end
198
+ end
199
+ end
200
+
201
+ context 'when the method is not defined' do
202
+ it 'raises an error' do
203
+ expect {
204
+ br_mock.assert_negative_with(:baz)
205
+ }.to raise_error { |error|
206
+ error.message.should == "Expected instances of Foo to respond to :baz"
207
+ }
208
+ end
209
+ end
210
+ end
211
+ end
212
+ end
102
213
  end
@@ -51,14 +51,23 @@ describe BetterReceive::Stub do
51
51
  it "passes all arguments through to the mock_proxy" do
52
52
  foo.should_receive(:send).with(:__mock_proxy).and_return(mock_proxy)
53
53
  mock_proxy.should_receive(:add_stub) do |*args, &block|
54
- args[1].should == :bar
55
- args[2].should == options
56
- block.should == block_param
54
+ args[1].should == :bar
55
+ args[2].should == options
56
+ block.should == block_param
57
57
  end
58
58
 
59
59
  br_stub.assert_with(:bar, passed: true, &block_param)
60
60
  end
61
61
 
62
+ it "converts the selector to a string" do
63
+ foo.should_receive(:send).with(:__mock_proxy).and_return(mock_proxy)
64
+ mock_proxy.should_receive(:add_stub) do |*args, &block|
65
+ args[1].should == :bar
66
+ end
67
+
68
+ br_stub.assert_with("bar", passed: true, &block_param)
69
+ end
70
+
62
71
  it "returns the value passed in the block" do
63
72
  br_stub.assert_with(:bar) { :baz }
64
73
 
metadata CHANGED
@@ -1,8 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: better_receive
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.4.1
5
- prerelease:
4
+ version: 0.5.0
6
5
  platform: ruby
7
6
  authors:
8
7
  - Steve Ellis
@@ -10,12 +9,11 @@ authors:
10
9
  autorequire:
11
10
  bindir: bin
12
11
  cert_chain: []
13
- date: 2013-02-07 00:00:00.000000000 Z
12
+ date: 2013-06-27 00:00:00.000000000 Z
14
13
  dependencies:
15
14
  - !ruby/object:Gem::Dependency
16
15
  name: rspec
17
16
  requirement: !ruby/object:Gem::Requirement
18
- none: false
19
17
  requirements:
20
18
  - - ~>
21
19
  - !ruby/object:Gem::Version
@@ -23,7 +21,6 @@ dependencies:
23
21
  type: :runtime
24
22
  prerelease: false
25
23
  version_requirements: !ruby/object:Gem::Requirement
26
- none: false
27
24
  requirements:
28
25
  - - ~>
29
26
  - !ruby/object:Gem::Version
@@ -31,33 +28,29 @@ dependencies:
31
28
  - !ruby/object:Gem::Dependency
32
29
  name: rake
33
30
  requirement: !ruby/object:Gem::Requirement
34
- none: false
35
31
  requirements:
36
- - - ! '>='
32
+ - - '>='
37
33
  - !ruby/object:Gem::Version
38
34
  version: '0'
39
35
  type: :development
40
36
  prerelease: false
41
37
  version_requirements: !ruby/object:Gem::Requirement
42
- none: false
43
38
  requirements:
44
- - - ! '>='
39
+ - - '>='
45
40
  - !ruby/object:Gem::Version
46
41
  version: '0'
47
42
  - !ruby/object:Gem::Dependency
48
43
  name: pry
49
44
  requirement: !ruby/object:Gem::Requirement
50
- none: false
51
45
  requirements:
52
- - - ! '>='
46
+ - - '>='
53
47
  - !ruby/object:Gem::Version
54
48
  version: '0'
55
49
  type: :development
56
50
  prerelease: false
57
51
  version_requirements: !ruby/object:Gem::Requirement
58
- none: false
59
52
  requirements:
60
- - - ! '>='
53
+ - - '>='
61
54
  - !ruby/object:Gem::Version
62
55
  version: '0'
63
56
  description: Assert that an object responds to a method before asserting that the
@@ -87,27 +80,26 @@ files:
87
80
  - spec/spec_helper.rb
88
81
  homepage: http://github.com/se3000/better_receive
89
82
  licenses: []
83
+ metadata: {}
90
84
  post_install_message:
91
85
  rdoc_options: []
92
86
  require_paths:
93
87
  - lib
94
88
  required_ruby_version: !ruby/object:Gem::Requirement
95
- none: false
96
89
  requirements:
97
- - - ! '>='
90
+ - - '>='
98
91
  - !ruby/object:Gem::Version
99
92
  version: '0'
100
93
  required_rubygems_version: !ruby/object:Gem::Requirement
101
- none: false
102
94
  requirements:
103
- - - ! '>='
95
+ - - '>='
104
96
  - !ruby/object:Gem::Version
105
97
  version: '0'
106
98
  requirements: []
107
99
  rubyforge_project:
108
- rubygems_version: 1.8.23
100
+ rubygems_version: 2.0.0
109
101
  signing_key:
110
- specification_version: 3
102
+ specification_version: 4
111
103
  summary: A more assertive mock.
112
104
  test_files:
113
105
  - spec/lib/better_receive/mock_spec.rb