rspec-mocks 2.3.0 → 2.4.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/History.markdown +8 -1
- data/Rakefile +2 -2
- data/features/.nav +11 -0
- data/features/README.markdown +2 -5
- data/features/message_expectations/README.md +59 -0
- data/features/message_expectations/expect_message.feature +1 -1
- data/features/message_expectations/warn_when_expectation_is_set_on_nil.feature +1 -1
- data/features/method_stubs/README.md +40 -0
- data/features/{stubs → method_stubs}/simple_return_value.feature +2 -2
- data/features/{stubs → method_stubs}/stub_chain.feature +8 -8
- data/features/{stubs → method_stubs}/stub_implementation.feature +1 -1
- data/features/outside_rspec/configuration.feature +1 -1
- data/features/outside_rspec/standalone.feature +1 -1
- data/lib/rspec/mocks/version.rb +1 -1
- metadata +17 -13
data/History.markdown
CHANGED
@@ -1,8 +1,15 @@
|
|
1
1
|
## rspec-mocks release history (incomplete)
|
2
2
|
|
3
|
+
### 2.4.0 / 2011-01-02
|
4
|
+
|
5
|
+
[full changelog](http://github.com/rspec/rspec-mocks/compare/v2.3.0...v2.4.0)
|
6
|
+
|
7
|
+
No functional changes in this release, which was made to align with the
|
8
|
+
rspec-core-2.4.0 release.
|
9
|
+
|
3
10
|
### 2.3.0 / 2010-12-12
|
4
11
|
|
5
|
-
[full changelog](http://github.com/rspec/rspec-mocks/compare/v2.2.
|
12
|
+
[full changelog](http://github.com/rspec/rspec-mocks/compare/v2.2.0...v2.3.0)
|
6
13
|
|
7
14
|
* Bug fixes
|
8
15
|
* Fix our Marshal extension so that it does not interfere with objects that
|
data/Rakefile
CHANGED
@@ -61,10 +61,10 @@ Rake::RDocTask.new do |rdoc|
|
|
61
61
|
rdoc.rdoc_files.include('lib/**/*.rb')
|
62
62
|
end
|
63
63
|
|
64
|
-
desc "Push cukes to relishapp using the relish-client-gem"
|
64
|
+
desc "Push docs/cukes to relishapp using the relish-client-gem"
|
65
65
|
task :relish, :version do |t, args|
|
66
66
|
raise "rake relish[VERSION]" unless args[:version]
|
67
|
-
sh "relish push
|
67
|
+
sh "relish push rspec/rspec-mocks:#{args[:version]}"
|
68
68
|
end
|
69
69
|
|
70
70
|
task :default => [:spec, :cucumber]
|
data/features/.nav
ADDED
@@ -0,0 +1,11 @@
|
|
1
|
+
- method_stubs:
|
2
|
+
- simple_return_value.feature
|
3
|
+
- stub_implementation.feature
|
4
|
+
- stub_chain.feature
|
5
|
+
- message_expectations:
|
6
|
+
- expect_message.feature
|
7
|
+
- block_local_expectations.feature.pending
|
8
|
+
- warn_when_expectation_is_set_on_nil.feature
|
9
|
+
- outside_rspec:
|
10
|
+
- configuration.feature
|
11
|
+
- standalone.feature
|
data/features/README.markdown
CHANGED
@@ -1,6 +1,6 @@
|
|
1
1
|
rspec-mocks is used to create dynamic "doubles", which stand in for real
|
2
|
-
objects in examples. You can
|
3
|
-
|
2
|
+
objects in examples. You can stub return values and/or set message
|
3
|
+
expectations:
|
4
4
|
|
5
5
|
describe Account do
|
6
6
|
context "when closed" do
|
@@ -16,9 +16,6 @@ methods), and/or stub return values for arbitrary messages:
|
|
16
16
|
end
|
17
17
|
end
|
18
18
|
|
19
|
-
Message expectations like the one in the example above are verified at
|
20
|
-
the end of each example.
|
21
|
-
|
22
19
|
## Issues
|
23
20
|
|
24
21
|
The documentation for rspec-mocks is a work in progress. We'll be adding
|
@@ -0,0 +1,59 @@
|
|
1
|
+
We're working on improving these docs. In the mean time, here's a cheat sheet
|
2
|
+
to cover the basics.
|
3
|
+
|
4
|
+
# create a double
|
5
|
+
obj = double()
|
6
|
+
|
7
|
+
# expect a message
|
8
|
+
obj.should_receive(:message)
|
9
|
+
|
10
|
+
# specify a return value
|
11
|
+
obj.should_receive(:message) { 'this is the value to return' }
|
12
|
+
|
13
|
+
### Argument constraints
|
14
|
+
|
15
|
+
#### Explicit arguments
|
16
|
+
|
17
|
+
obj.should_receive(:message).with('an argument')
|
18
|
+
obj.should_receive(:message).with('more_than', 'one_argument')
|
19
|
+
|
20
|
+
#### Argument matchers
|
21
|
+
|
22
|
+
obj.should_receive(:message).with(anything())
|
23
|
+
obj.should_receive(:message).with(an_instance_of(Money))
|
24
|
+
obj.should_receive(:message).with(hash_including(:a => 'b'))
|
25
|
+
|
26
|
+
#### Regular expressions
|
27
|
+
|
28
|
+
obj.should_receive(:message).with(/abc/)
|
29
|
+
|
30
|
+
### Counts
|
31
|
+
|
32
|
+
obj.should_receive(:message).once
|
33
|
+
obj.should_receive(:message).twice
|
34
|
+
obj.should_receive(:message).exactly(3).times
|
35
|
+
|
36
|
+
obj.should_receive(:message).at_least(:once)
|
37
|
+
obj.should_receive(:message).at_least(:twice)
|
38
|
+
obj.should_receive(:message).at_least(n).times
|
39
|
+
|
40
|
+
obj.should_receive(:message).at_most(:once)
|
41
|
+
obj.should_receive(:message).at_most(:twice)
|
42
|
+
obj.should_receive(:message).at_most(n).times
|
43
|
+
|
44
|
+
### Raising/Throwing
|
45
|
+
|
46
|
+
obj.should_receive(:message) { raise "this error" }
|
47
|
+
obj.should_receive(:message) { throw :this_symbol }
|
48
|
+
|
49
|
+
### Ordering
|
50
|
+
|
51
|
+
obj.should_receive(:one).ordered
|
52
|
+
obj.should_receive(:two).ordered
|
53
|
+
|
54
|
+
### Arbitrary handling
|
55
|
+
|
56
|
+
obj.should_receive(:message) do |arg1, arg2|
|
57
|
+
# set expectations about the args in this block
|
58
|
+
# and set a return value
|
59
|
+
end
|
@@ -0,0 +1,40 @@
|
|
1
|
+
We're working on improving these docs. In the mean time, here's a cheat sheet
|
2
|
+
to cover the basics.
|
3
|
+
|
4
|
+
# create a double
|
5
|
+
obj = double()
|
6
|
+
|
7
|
+
# stub a method
|
8
|
+
obj.stub(:message) # returns obj
|
9
|
+
|
10
|
+
# specify a return value
|
11
|
+
obj.stub(:message) { 'this is the value to return' }
|
12
|
+
|
13
|
+
### Argument constraints
|
14
|
+
|
15
|
+
#### Explicit arguments
|
16
|
+
|
17
|
+
obj.stub(:message).with('an argument')
|
18
|
+
obj.stub(:message).with('more_than', 'one_argument')
|
19
|
+
|
20
|
+
#### Argument matchers
|
21
|
+
|
22
|
+
obj.stub(:message).with(anything())
|
23
|
+
obj.stub(:message).with(an_instance_of(Money))
|
24
|
+
obj.stub(:message).with(hash_including(:a => 'b'))
|
25
|
+
|
26
|
+
#### Regular expressions
|
27
|
+
|
28
|
+
obj.stub(:message).with(/abc/)
|
29
|
+
|
30
|
+
### Raising/Throwing
|
31
|
+
|
32
|
+
obj.stub(:message) { raise "this error" }
|
33
|
+
obj.stub(:message) { throw :this_symbol }
|
34
|
+
|
35
|
+
### Arbitrary handling
|
36
|
+
|
37
|
+
obj.stub(:message) do |arg1, arg2|
|
38
|
+
# set expectations about the args in this block
|
39
|
+
# and set a return value
|
40
|
+
end
|
@@ -1,6 +1,6 @@
|
|
1
|
-
Feature:
|
1
|
+
Feature: stub with a simple return value
|
2
2
|
|
3
|
-
Use the stub
|
3
|
+
Use the `stub` method on a test double or a real object to tell the object to
|
4
4
|
return a value (or values) in response to a given message. If the message is
|
5
5
|
never received, nothing happens.
|
6
6
|
|
@@ -1,23 +1,23 @@
|
|
1
|
-
Feature:
|
1
|
+
Feature: stub a chain of methods
|
2
2
|
|
3
|
-
The stub_chain method lets you to stub a chain of methods in one statement.
|
3
|
+
The `stub_chain` method lets you to stub a chain of methods in one statement.
|
4
4
|
Method chains are considered a design smell, but it's not really the method
|
5
5
|
chain that is the problem - it's the dependency chain represented by a chain
|
6
6
|
of messages to different objects:
|
7
7
|
|
8
|
-
|
8
|
+
foo.get_bar.get_baz
|
9
9
|
|
10
|
-
This is a Law of Demeter violation if get_bar
|
11
|
-
foo
|
10
|
+
This is a Law of Demeter violation if `get_bar` returns an object other than
|
11
|
+
`foo`, and `get_baz` returns yet another object.
|
12
12
|
|
13
13
|
Fluent interfaces look similar from a caller's perspective, but don't
|
14
14
|
represent a dependency chain (the caller depends only on the object it is
|
15
15
|
calling). Consider this common example from Ruby on Rails:
|
16
16
|
|
17
|
-
|
17
|
+
Article.recent.by(current_user)
|
18
18
|
|
19
|
-
The recent
|
20
|
-
|
19
|
+
The `recent` and `by` methods return the same object, so this is not a Law of
|
20
|
+
Demeter violation.
|
21
21
|
|
22
22
|
Scenario: stub a chain of methods
|
23
23
|
Given a file named "stub_chain_spec.rb" with:
|
@@ -4,7 +4,7 @@ Feature: standalone
|
|
4
4
|
outside the RSpec environment. This is especially useful for
|
5
5
|
exploring rspec-mocks in irb.
|
6
6
|
|
7
|
-
Scenario: stub outside rspec
|
7
|
+
Scenario: method stub outside rspec
|
8
8
|
Given a file named "example.rb" with:
|
9
9
|
"""
|
10
10
|
require "rspec/mocks/standalone"
|
data/lib/rspec/mocks/version.rb
CHANGED
metadata
CHANGED
@@ -1,13 +1,12 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: rspec-mocks
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
hash: 3
|
5
4
|
prerelease: false
|
6
5
|
segments:
|
7
6
|
- 2
|
8
|
-
-
|
7
|
+
- 4
|
9
8
|
- 0
|
10
|
-
version: 2.
|
9
|
+
version: 2.4.0
|
11
10
|
platform: ruby
|
12
11
|
authors:
|
13
12
|
- David Chelimsky
|
@@ -16,7 +15,7 @@ autorequire:
|
|
16
15
|
bindir: bin
|
17
16
|
cert_chain: []
|
18
17
|
|
19
|
-
date:
|
18
|
+
date: 2011-01-02 00:00:00 -06:00
|
20
19
|
default_executable:
|
21
20
|
dependencies: []
|
22
21
|
|
@@ -41,15 +40,18 @@ files:
|
|
41
40
|
- Upgrade.markdown
|
42
41
|
- autotest/discover.rb
|
43
42
|
- cucumber.yml
|
43
|
+
- features/.nav
|
44
44
|
- features/README.markdown
|
45
|
+
- features/message_expectations/README.md
|
45
46
|
- features/message_expectations/block_local_expectations.feature.pending
|
46
47
|
- features/message_expectations/expect_message.feature
|
47
48
|
- features/message_expectations/warn_when_expectation_is_set_on_nil.feature
|
49
|
+
- features/method_stubs/README.md
|
50
|
+
- features/method_stubs/simple_return_value.feature
|
51
|
+
- features/method_stubs/stub_chain.feature
|
52
|
+
- features/method_stubs/stub_implementation.feature
|
48
53
|
- features/outside_rspec/configuration.feature
|
49
54
|
- features/outside_rspec/standalone.feature
|
50
|
-
- features/stubs/simple_return_value.feature
|
51
|
-
- features/stubs/stub_chain.feature
|
52
|
-
- features/stubs/stub_implementation.feature
|
53
55
|
- features/support/env.rb
|
54
56
|
- lib/rspec/mocks.rb
|
55
57
|
- lib/rspec/mocks/argument_expectation.rb
|
@@ -130,7 +132,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
130
132
|
requirements:
|
131
133
|
- - ">="
|
132
134
|
- !ruby/object:Gem::Version
|
133
|
-
hash:
|
135
|
+
hash: 1914883193122525774
|
134
136
|
segments:
|
135
137
|
- 0
|
136
138
|
version: "0"
|
@@ -139,7 +141,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
139
141
|
requirements:
|
140
142
|
- - ">="
|
141
143
|
- !ruby/object:Gem::Version
|
142
|
-
hash:
|
144
|
+
hash: 1914883193122525774
|
143
145
|
segments:
|
144
146
|
- 0
|
145
147
|
version: "0"
|
@@ -149,17 +151,19 @@ rubyforge_project: rspec
|
|
149
151
|
rubygems_version: 1.3.7
|
150
152
|
signing_key:
|
151
153
|
specification_version: 3
|
152
|
-
summary: rspec-mocks-2.
|
154
|
+
summary: rspec-mocks-2.4.0
|
153
155
|
test_files:
|
154
156
|
- features/README.markdown
|
157
|
+
- features/message_expectations/README.md
|
155
158
|
- features/message_expectations/block_local_expectations.feature.pending
|
156
159
|
- features/message_expectations/expect_message.feature
|
157
160
|
- features/message_expectations/warn_when_expectation_is_set_on_nil.feature
|
161
|
+
- features/method_stubs/README.md
|
162
|
+
- features/method_stubs/simple_return_value.feature
|
163
|
+
- features/method_stubs/stub_chain.feature
|
164
|
+
- features/method_stubs/stub_implementation.feature
|
158
165
|
- features/outside_rspec/configuration.feature
|
159
166
|
- features/outside_rspec/standalone.feature
|
160
|
-
- features/stubs/simple_return_value.feature
|
161
|
-
- features/stubs/stub_chain.feature
|
162
|
-
- features/stubs/stub_implementation.feature
|
163
167
|
- features/support/env.rb
|
164
168
|
- spec/rspec/mocks/and_yield_spec.rb
|
165
169
|
- spec/rspec/mocks/any_number_of_times_spec.rb
|