better_receive 0.1.1 → 0.2.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/lib/better_receive/mock.rb +44 -7
- data/lib/better_receive/version.rb +1 -1
- data/lib/better_receive.rb +1 -1
- data/spec/lib/better_receive_spec.rb +34 -0
- metadata +2 -2
data/lib/better_receive/mock.rb
CHANGED
@@ -1,29 +1,66 @@
|
|
1
1
|
module BetterReceive
|
2
2
|
class Mock
|
3
|
-
attr_reader :expectation, :object
|
4
3
|
|
5
4
|
def initialize(object)
|
6
5
|
@object = object
|
7
6
|
end
|
8
7
|
|
9
|
-
def
|
10
|
-
|
8
|
+
def responds_to_and_receives(selector, options, &block)
|
9
|
+
better_respond_to(selector)
|
11
10
|
|
12
11
|
mock_method(selector, options, &block)
|
13
12
|
end
|
14
13
|
|
14
|
+
def rspec_verify
|
15
|
+
end
|
16
|
+
|
15
17
|
private
|
16
18
|
|
17
|
-
|
18
|
-
mock_proxy = object.send(:__mock_proxy)
|
19
|
+
attr_reader :object
|
19
20
|
|
20
|
-
|
21
|
-
|
21
|
+
def better_respond_to(selector)
|
22
|
+
case object
|
23
|
+
when RSpec::Mocks::AnyInstance::Recorder
|
24
|
+
any_instance_should_respond_to selector
|
25
|
+
else
|
26
|
+
object.should respond_to(selector)
|
27
|
+
end
|
28
|
+
end
|
29
|
+
|
30
|
+
def any_instance_should_respond_to(selector)
|
31
|
+
klass = object.instance_variable_get(:@klass)
|
32
|
+
unless klass.method_defined?(selector)
|
33
|
+
raise "Expected instances of #{klass.name} to respond to :#{selector}"
|
34
|
+
end
|
22
35
|
end
|
23
36
|
|
24
37
|
def respond_to(selector)
|
25
38
|
RSpec::Matchers::BuiltIn::RespondTo.new(selector)
|
26
39
|
end
|
27
40
|
|
41
|
+
def mock_method(selector, options, &block)
|
42
|
+
case object
|
43
|
+
when RSpec::Mocks::AnyInstance::Recorder
|
44
|
+
any_instance_should_receive selector, &block
|
45
|
+
else
|
46
|
+
location = options[:expected_from] || caller(1)[2]
|
47
|
+
mock_proxy.add_message_expectation(location, selector, options, &block)
|
48
|
+
end
|
49
|
+
end
|
50
|
+
|
51
|
+
def any_instance_should_receive(selector, &block)
|
52
|
+
RSpec::Mocks::space.add(object)
|
53
|
+
|
54
|
+
object.instance_variable_set(:@expectation_set, true)
|
55
|
+
object.send(:observe!, selector)
|
56
|
+
|
57
|
+
expectation_chain = RSpec::Mocks::AnyInstance::PositiveExpectationChain.new(selector, &block)
|
58
|
+
object.message_chains.add(selector, expectation_chain)
|
59
|
+
end
|
60
|
+
|
61
|
+
def mock_proxy
|
62
|
+
@mock_proxy ||= object.send(:__mock_proxy)
|
63
|
+
end
|
64
|
+
|
28
65
|
end
|
29
66
|
end
|
data/lib/better_receive.rb
CHANGED
@@ -60,6 +60,40 @@ describe BetterReceive do
|
|
60
60
|
foo.better_receive(:bar, passed: true, &block_param)
|
61
61
|
end
|
62
62
|
end
|
63
|
+
|
64
|
+
context "on .any_instance" do
|
65
|
+
context "when the method is defined" do
|
66
|
+
context "and the method is called" do
|
67
|
+
it 'does not raise an error' do
|
68
|
+
expect {
|
69
|
+
Foo.any_instance.better_receive(:bar)
|
70
|
+
foo.bar
|
71
|
+
}.to_not raise_error
|
72
|
+
end
|
73
|
+
end
|
74
|
+
|
75
|
+
context 'and the method is not called' do
|
76
|
+
it 'does raise an error' do
|
77
|
+
expect {
|
78
|
+
Foo.any_instance.better_receive(:bar)
|
79
|
+
RSpec::Mocks::space.verify_all
|
80
|
+
}.to raise_error(RSpec::Mocks::MockExpectationError) { |error|
|
81
|
+
error.message.should == "Exactly one instance should have received the following message(s) but didn't: bar"
|
82
|
+
}
|
83
|
+
end
|
84
|
+
end
|
85
|
+
end
|
86
|
+
|
87
|
+
context 'when the method is not defined' do
|
88
|
+
it 'raises an error' do
|
89
|
+
expect {
|
90
|
+
Foo.any_instance.better_receive(:baz)
|
91
|
+
}.to raise_error { |error|
|
92
|
+
error.message.should == "Expected instances of Foo to respond to :baz"
|
93
|
+
}
|
94
|
+
end
|
95
|
+
end
|
96
|
+
end
|
63
97
|
end
|
64
98
|
end
|
65
99
|
end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: better_receive
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.2.0
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -10,7 +10,7 @@ authors:
|
|
10
10
|
autorequire:
|
11
11
|
bindir: bin
|
12
12
|
cert_chain: []
|
13
|
-
date: 2013-01-
|
13
|
+
date: 2013-01-15 00:00:00.000000000 Z
|
14
14
|
dependencies:
|
15
15
|
- !ruby/object:Gem::Dependency
|
16
16
|
name: rspec
|