rspec-expectations 2.3.0 → 2.4.0
Sign up to get free protection for your applications and to get access to all the features.
- data/Guardfile +5 -0
- data/History.markdown +10 -0
- data/Rakefile +2 -2
- data/features/.nav +27 -0
- data/features/README.markdown +26 -2
- data/features/{matchers → built_in_matchers}/be.feature +31 -45
- data/features/{matchers → built_in_matchers}/be_within.feature +0 -0
- data/features/{matchers → built_in_matchers}/equality.feature +1 -1
- data/features/{matchers → built_in_matchers}/exist.feature +0 -0
- data/features/{matchers → built_in_matchers}/expect_change.feature +1 -1
- data/features/{matchers → built_in_matchers}/expect_error.feature +1 -1
- data/features/{matchers → built_in_matchers}/have.feature +0 -0
- data/features/{matchers → built_in_matchers}/include.feature +0 -0
- data/features/{matchers → built_in_matchers}/match.feature +0 -0
- data/features/built_in_matchers/operators.feature +221 -0
- data/features/{matchers → built_in_matchers}/predicates.feature +1 -1
- data/features/{matchers → built_in_matchers}/respond_to.feature +0 -0
- data/features/{matchers → built_in_matchers}/satisfy.feature +1 -1
- data/features/{matchers → built_in_matchers}/throw_symbol.feature +1 -1
- data/features/{matchers → built_in_matchers}/types.feature +0 -0
- data/features/{matchers → custom_matchers}/access_running_example.feature +1 -1
- data/features/{matchers → custom_matchers}/define_diffable_matcher.feature +1 -1
- data/features/{matchers → custom_matchers}/define_matcher.feature +1 -1
- data/features/{matchers → custom_matchers}/define_matcher_outside_rspec.feature +1 -1
- data/features/{matchers → custom_matchers}/define_matcher_with_fluent_interface.feature +1 -1
- data/features/{expectations/customized_message.feature → customized_message.feature} +0 -0
- data/features/{expectations/diffing.feature → diffing.feature} +12 -12
- data/features/{expectations/implicit_docstrings.feature → implicit_docstrings.feature} +0 -0
- data/lib/rspec/expectations/version.rb +1 -1
- data/lib/rspec/matchers/be.rb +4 -4
- data/lib/rspec/matchers/change.rb +25 -19
- data/lib/rspec/matchers/operator_matcher.rb +3 -3
- data/spec/rspec/matchers/be_spec.rb +8 -8
- data/spec/rspec/matchers/operator_matcher_spec.rb +10 -10
- metadata +55 -57
- data/features/expectations/attribute_of_subject.feature +0 -19
- data/features/matchers/operators.feature +0 -280
data/Guardfile
ADDED
data/History.markdown
CHANGED
@@ -1,5 +1,15 @@
|
|
1
1
|
## rspec-expectations release history (incomplete)
|
2
2
|
|
3
|
+
### 2.4.0 / 2011-01-02
|
4
|
+
|
5
|
+
[full changelog](http://github.com/rspec/rspec-expectations/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
|
+
|
10
|
+
* Enhancements
|
11
|
+
* improved RDoc for change matcher (Jo Liss)
|
12
|
+
|
3
13
|
### 2.3.0 / 2010-12-12
|
4
14
|
|
5
15
|
[full changelog](http://github.com/rspec/rspec-expectations/compare/v2.2.1...v2.3.0)
|
data/Rakefile
CHANGED
@@ -55,10 +55,10 @@ Rake::RDocTask.new do |rdoc|
|
|
55
55
|
rdoc.rdoc_files.include('lib/**/*.rb')
|
56
56
|
end
|
57
57
|
|
58
|
-
desc "Push cukes to relishapp using the relish-client-gem"
|
58
|
+
desc "Push docs/cukes to relishapp using the relish-client-gem"
|
59
59
|
task :relish, :version do |t, args|
|
60
60
|
raise "rake relish[VERSION]" unless args[:version]
|
61
|
-
sh "
|
61
|
+
sh "relish push rspec/rspec-expectations:#{args[:version]}"
|
62
62
|
end
|
63
63
|
|
64
64
|
task :clobber do
|
data/features/.nav
ADDED
@@ -0,0 +1,27 @@
|
|
1
|
+
- customized_message.feature
|
2
|
+
- diffing.feature
|
3
|
+
- implicit_docstrings.feature
|
4
|
+
- built_in_matchers:
|
5
|
+
- be.feature
|
6
|
+
- be_within.feature
|
7
|
+
- equality.feature
|
8
|
+
- exist.feature
|
9
|
+
- expect_change.feature
|
10
|
+
- expect_error.feature
|
11
|
+
- have.feature
|
12
|
+
- include.feature
|
13
|
+
- match.feature
|
14
|
+
- operators.feature
|
15
|
+
- predicates.feature
|
16
|
+
- respond_to.feature
|
17
|
+
- satisfy.feature
|
18
|
+
- throw_symbol.feature
|
19
|
+
- types.feature
|
20
|
+
- custom_matchers:
|
21
|
+
- define_matcher.feature
|
22
|
+
- define_diffable_matcher.feature
|
23
|
+
- define_matcher_with_fluent_interface.feature
|
24
|
+
- access_running_example.feature
|
25
|
+
- define_matcher_outside_rspec.feature
|
26
|
+
- test_frameworks:
|
27
|
+
- test_unit.feature
|
data/features/README.markdown
CHANGED
@@ -1,5 +1,4 @@
|
|
1
|
-
rspec-expectations is used to set expectations in executable
|
2
|
-
examples:
|
1
|
+
rspec-expectations is used to set expectations in executable examples.
|
3
2
|
|
4
3
|
describe Account do
|
5
4
|
it "has a balance of zero when first created" do
|
@@ -7,6 +6,31 @@ examples:
|
|
7
6
|
end
|
8
7
|
end
|
9
8
|
|
9
|
+
## should and should_not
|
10
|
+
|
11
|
+
rspec-expectations adds `should` and `should_not` to every object. Each of
|
12
|
+
these can accept a matcher and, in most cases, an optional custom failure
|
13
|
+
message (see [customized
|
14
|
+
message](/rspec/rspec-expectations/v/2-3/customized-message)).
|
15
|
+
|
16
|
+
## Matchers
|
17
|
+
|
18
|
+
A Matcher is any object that responds to the following methods:
|
19
|
+
|
20
|
+
matches?(actual)
|
21
|
+
failure_message_for_should
|
22
|
+
|
23
|
+
These methods are also part of the matcher protocol, but are optional:
|
24
|
+
|
25
|
+
does_not_match?(actual)
|
26
|
+
failure_message_for_should_not
|
27
|
+
description
|
28
|
+
|
29
|
+
RSpec ships with a number of [built-in
|
30
|
+
matchers](/rspec/rspec-expectations/v/2-3/dir/built-in-matchers) and a DSL for
|
31
|
+
writing your own [custom
|
32
|
+
matchers](/rspec/rspec-expectations/v/2-3/dir/custom-matchers).
|
33
|
+
|
10
34
|
## Issues
|
11
35
|
|
12
36
|
The documentation for rspec-expectations is a work in progress. We'll be adding
|
@@ -1,15 +1,11 @@
|
|
1
|
-
Feature: be matchers
|
1
|
+
Feature: "be" matchers
|
2
2
|
|
3
3
|
There are several related "be" matchers:
|
4
4
|
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
* obj.should be < expected # passes if obj < expected
|
10
|
-
* obj.should be > expected # passes if obj > expected
|
11
|
-
* obj.should be <= expected # passes if obj <= expected
|
12
|
-
* obj.should be >= expected # passes if obj >= expected
|
5
|
+
obj.should be_true # passes if obj is truthy (not nil or false)
|
6
|
+
obj.should be_false # passes if obj is falsy (nil or false)
|
7
|
+
obj.should be_nil # passes if obj is nil
|
8
|
+
obj.should be # passes if obj is not nil
|
13
9
|
|
14
10
|
Scenario: be_true matcher
|
15
11
|
Given a file named "be_true_spec.rb" with:
|
@@ -84,13 +80,32 @@ Feature: be matchers
|
|
84
80
|
end
|
85
81
|
"""
|
86
82
|
When I run "rspec be_nil_spec.rb"
|
87
|
-
Then the output should contain
|
88
|
-
|
89
|
-
|
90
|
-
|
91
|
-
|
92
|
-
|
93
|
-
|
83
|
+
Then the output should contain "10 examples, 5 failures"
|
84
|
+
And the output should contain:
|
85
|
+
"""
|
86
|
+
expected: not nil
|
87
|
+
got: nil
|
88
|
+
"""
|
89
|
+
And the output should contain:
|
90
|
+
"""
|
91
|
+
expected: nil
|
92
|
+
got: false
|
93
|
+
"""
|
94
|
+
And the output should contain:
|
95
|
+
"""
|
96
|
+
expected: nil
|
97
|
+
got: true
|
98
|
+
"""
|
99
|
+
And the output should contain:
|
100
|
+
"""
|
101
|
+
expected: nil
|
102
|
+
got: 7
|
103
|
+
"""
|
104
|
+
And the output should contain:
|
105
|
+
"""
|
106
|
+
expected: nil
|
107
|
+
got: "foo"
|
108
|
+
"""
|
94
109
|
|
95
110
|
Scenario: be matcher
|
96
111
|
Given a file named "be_spec.rb" with:
|
@@ -118,32 +133,3 @@ Feature: be matchers
|
|
118
133
|
| expected "foo" to evaluate to false |
|
119
134
|
| expected nil to evaluate to true |
|
120
135
|
| expected false to evaluate to true |
|
121
|
-
|
122
|
-
Scenario: be operator matchers
|
123
|
-
Given a file named "be_operators_spec.rb" with:
|
124
|
-
"""
|
125
|
-
describe 17 do
|
126
|
-
it { should be < 20 }
|
127
|
-
it { should be > 15 }
|
128
|
-
it { should be <= 17 }
|
129
|
-
it { should be >= 17 }
|
130
|
-
it { should_not be < 15 }
|
131
|
-
it { should_not be > 20 }
|
132
|
-
it { should_not be <= 16 }
|
133
|
-
it { should_not be >= 18 }
|
134
|
-
|
135
|
-
# deliberate failures
|
136
|
-
it { should be < 15 }
|
137
|
-
it { should be > 20 }
|
138
|
-
it { should be <= 16 }
|
139
|
-
it { should be >= 18 }
|
140
|
-
end
|
141
|
-
"""
|
142
|
-
When I run "rspec be_operators_spec.rb"
|
143
|
-
Then the output should contain all of these:
|
144
|
-
| 12 examples, 4 failures |
|
145
|
-
| expected < 15, got 17 |
|
146
|
-
| expected > 20, got 17 |
|
147
|
-
| expected <= 16, got 17 |
|
148
|
-
| expected >= 18, got 17 |
|
149
|
-
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
@@ -0,0 +1,221 @@
|
|
1
|
+
Feature: operator matchers
|
2
|
+
|
3
|
+
RSpec provides a number of matchers that are based on Ruby's built-in
|
4
|
+
operators. These pretty much work like you expect. For example, each of these
|
5
|
+
pass:
|
6
|
+
|
7
|
+
7.should == 7
|
8
|
+
[1, 2, 3].should == [1, 2, 3]
|
9
|
+
"this is a string".should =~ /^this/
|
10
|
+
"this is a string".should_not =~ /^that/
|
11
|
+
String.should === "this is a string"
|
12
|
+
|
13
|
+
You can also use comparison operators combined with the "be" matcher like
|
14
|
+
this:
|
15
|
+
|
16
|
+
37.should be < 100
|
17
|
+
37.should be <= 38
|
18
|
+
37.should be >= 2
|
19
|
+
37.should be > 7
|
20
|
+
|
21
|
+
RSpec also provides a `=~` matcher for arrays that disregards differences in
|
22
|
+
the ording between the actual and expected array. For example:
|
23
|
+
|
24
|
+
[1, 2, 3].should =~ [2, 3, 1] # pass
|
25
|
+
[:a, :c, :b].should =~ [:a, :c] # fail
|
26
|
+
|
27
|
+
Scenario: numeric operator matchers
|
28
|
+
Given a file named "numeric_operator_matchers_spec.rb" with:
|
29
|
+
"""
|
30
|
+
describe 18 do
|
31
|
+
it { should == 18 }
|
32
|
+
it { should be < 20 }
|
33
|
+
it { should be > 15 }
|
34
|
+
it { should be <= 19 }
|
35
|
+
it { should be >= 17 }
|
36
|
+
|
37
|
+
it { should_not == 28 }
|
38
|
+
|
39
|
+
# deliberate failures
|
40
|
+
it { should == 28 }
|
41
|
+
it { should be < 15 }
|
42
|
+
it { should be > 20 }
|
43
|
+
it { should be <= 17 }
|
44
|
+
it { should be >= 19 }
|
45
|
+
|
46
|
+
it { should_not == 18 }
|
47
|
+
end
|
48
|
+
"""
|
49
|
+
When I run "rspec numeric_operator_matchers_spec.rb"
|
50
|
+
Then the output should contain "12 examples, 6 failures"
|
51
|
+
And the output should contain:
|
52
|
+
"""
|
53
|
+
Failure/Error: it { should == 28 }
|
54
|
+
expected: 28
|
55
|
+
got: 18 (using ==)
|
56
|
+
"""
|
57
|
+
And the output should contain:
|
58
|
+
"""
|
59
|
+
Failure/Error: it { should be < 15 }
|
60
|
+
expected: < 15
|
61
|
+
got: 18
|
62
|
+
"""
|
63
|
+
And the output should contain:
|
64
|
+
"""
|
65
|
+
Failure/Error: it { should be > 20 }
|
66
|
+
expected: > 20
|
67
|
+
got: 18
|
68
|
+
"""
|
69
|
+
And the output should contain:
|
70
|
+
"""
|
71
|
+
Failure/Error: it { should be <= 17 }
|
72
|
+
expected: <= 17
|
73
|
+
got: 18
|
74
|
+
"""
|
75
|
+
And the output should contain:
|
76
|
+
"""
|
77
|
+
Failure/Error: it { should be >= 19 }
|
78
|
+
expected: >= 19
|
79
|
+
got: 18
|
80
|
+
"""
|
81
|
+
And the output should contain:
|
82
|
+
"""
|
83
|
+
Failure/Error: it { should_not == 18 }
|
84
|
+
expected not: == 18
|
85
|
+
got: 18
|
86
|
+
"""
|
87
|
+
|
88
|
+
Scenario: string operator matchers
|
89
|
+
Given a file named "string_operator_matchers_spec.rb" with:
|
90
|
+
"""
|
91
|
+
describe "Strawberry" do
|
92
|
+
it { should == "Strawberry" }
|
93
|
+
it { should be < "Tomato" }
|
94
|
+
it { should be > "Apple" }
|
95
|
+
it { should be <= "Turnip" }
|
96
|
+
it { should be >= "Banana" }
|
97
|
+
it { should =~ /berry/ }
|
98
|
+
|
99
|
+
it { should_not == "Peach" }
|
100
|
+
it { should_not =~ /apple/ }
|
101
|
+
|
102
|
+
it "reports that it is a string using ===" do
|
103
|
+
String.should === subject
|
104
|
+
end
|
105
|
+
|
106
|
+
# deliberate failures
|
107
|
+
it { should == "Peach" }
|
108
|
+
it { should be < "Cranberry" }
|
109
|
+
it { should be > "Zuchini" }
|
110
|
+
it { should be <= "Potato" }
|
111
|
+
it { should be >= "Tomato" }
|
112
|
+
it { should =~ /apple/ }
|
113
|
+
|
114
|
+
it { should_not == "Strawberry" }
|
115
|
+
it { should_not =~ /berry/ }
|
116
|
+
|
117
|
+
it "fails a spec asserting that it is a symbol" do
|
118
|
+
Symbol.should === subject
|
119
|
+
end
|
120
|
+
end
|
121
|
+
"""
|
122
|
+
When I run "rspec string_operator_matchers_spec.rb"
|
123
|
+
Then the output should contain "18 examples, 9 failures"
|
124
|
+
And the output should contain:
|
125
|
+
"""
|
126
|
+
Failure/Error: it { should == "Peach" }
|
127
|
+
expected: "Peach"
|
128
|
+
got: "Strawberry" (using ==)
|
129
|
+
"""
|
130
|
+
And the output should contain:
|
131
|
+
"""
|
132
|
+
Failure/Error: it { should be < "Cranberry" }
|
133
|
+
expected: < "Cranberry"
|
134
|
+
got: "Strawberry"
|
135
|
+
"""
|
136
|
+
And the output should contain:
|
137
|
+
"""
|
138
|
+
Failure/Error: it { should be > "Zuchini" }
|
139
|
+
expected: > "Zuchini"
|
140
|
+
got: "Strawberry"
|
141
|
+
"""
|
142
|
+
And the output should contain:
|
143
|
+
"""
|
144
|
+
Failure/Error: it { should be <= "Potato" }
|
145
|
+
expected: <= "Potato"
|
146
|
+
got: "Strawberry"
|
147
|
+
"""
|
148
|
+
And the output should contain:
|
149
|
+
"""
|
150
|
+
Failure/Error: it { should be >= "Tomato" }
|
151
|
+
expected: >= "Tomato"
|
152
|
+
got: "Strawberry"
|
153
|
+
"""
|
154
|
+
And the output should contain:
|
155
|
+
"""
|
156
|
+
Failure/Error: it { should =~ /apple/ }
|
157
|
+
expected: /apple/
|
158
|
+
got: "Strawberry" (using =~)
|
159
|
+
"""
|
160
|
+
And the output should contain:
|
161
|
+
"""
|
162
|
+
Failure/Error: it { should_not == "Strawberry" }
|
163
|
+
expected not: == "Strawberry"
|
164
|
+
got: "Strawberry"
|
165
|
+
"""
|
166
|
+
And the output should contain:
|
167
|
+
"""
|
168
|
+
Failure/Error: it { should_not =~ /berry/ }
|
169
|
+
expected not: =~ /berry/
|
170
|
+
got: "Strawberry"
|
171
|
+
"""
|
172
|
+
And the output should contain:
|
173
|
+
"""
|
174
|
+
Failure/Error: Symbol.should === subject
|
175
|
+
expected: "Strawberry"
|
176
|
+
got: Symbol (using ===)
|
177
|
+
"""
|
178
|
+
|
179
|
+
Scenario: array operator matchers
|
180
|
+
Given a file named "array_operator_matchers_spec.rb" with:
|
181
|
+
"""
|
182
|
+
describe [1, 2, 3] do
|
183
|
+
it { should == [1, 2, 3] }
|
184
|
+
it { should_not == [1, 3, 2] }
|
185
|
+
|
186
|
+
it { should =~ [1, 2, 3] }
|
187
|
+
it { should =~ [1, 3, 2] }
|
188
|
+
it { should =~ [2, 1, 3] }
|
189
|
+
it { should =~ [2, 3, 1] }
|
190
|
+
it { should =~ [3, 1, 2] }
|
191
|
+
it { should =~ [3, 2, 1] }
|
192
|
+
|
193
|
+
# deliberate failures
|
194
|
+
it { should_not == [1, 2, 3] }
|
195
|
+
it { should == [1, 3, 2] }
|
196
|
+
it { should =~ [1, 2, 1] }
|
197
|
+
end
|
198
|
+
"""
|
199
|
+
When I run "rspec array_operator_matchers_spec.rb"
|
200
|
+
Then the output should contain "11 examples, 3 failures"
|
201
|
+
And the output should contain:
|
202
|
+
"""
|
203
|
+
Failure/Error: it { should_not == [1, 2, 3] }
|
204
|
+
expected not: == [1, 2, 3]
|
205
|
+
got: [1, 2, 3]
|
206
|
+
"""
|
207
|
+
And the output should contain:
|
208
|
+
"""
|
209
|
+
Failure/Error: it { should == [1, 3, 2] }
|
210
|
+
expected: [1, 3, 2]
|
211
|
+
got: [1, 2, 3] (using ==)
|
212
|
+
"""
|
213
|
+
And the output should contain:
|
214
|
+
"""
|
215
|
+
Failure/Error: it { should =~ [1, 2, 1] }
|
216
|
+
expected collection contained: [1, 1, 2]
|
217
|
+
actual collection contained: [1, 2, 3]
|
218
|
+
the missing elements were: [1]
|
219
|
+
the extra elements were: [3]
|
220
|
+
"""
|
221
|
+
|