rspec-expectations 3.0.0.beta2 → 3.0.0.rc1
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +7 -0
- checksums.yaml.gz.sig +0 -0
- data.tar.gz.sig +2 -2
- data/.yardopts +0 -1
- data/Changelog.md +115 -35
- data/README.md +2 -2
- data/lib/rspec/expectations.rb +13 -8
- data/lib/rspec/{matchers → expectations}/configuration.rb +38 -13
- data/lib/rspec/expectations/expectation_target.rb +72 -8
- data/lib/rspec/expectations/fail_with.rb +10 -52
- data/lib/rspec/expectations/handler.rb +9 -11
- data/lib/rspec/expectations/syntax.rb +37 -35
- data/lib/rspec/expectations/version.rb +1 -1
- data/lib/rspec/matchers.rb +60 -9
- data/lib/rspec/matchers/aliased_matcher.rb +6 -0
- data/lib/rspec/matchers/built_in.rb +9 -1
- data/lib/rspec/matchers/built_in/all.rb +78 -0
- data/lib/rspec/matchers/built_in/base_matcher.rb +39 -1
- data/lib/rspec/matchers/built_in/be.rb +117 -42
- data/lib/rspec/matchers/built_in/be_between.rb +22 -0
- data/lib/rspec/matchers/built_in/be_instance_of.rb +11 -3
- data/lib/rspec/matchers/built_in/be_kind_of.rb +5 -0
- data/lib/rspec/matchers/built_in/be_within.rb +26 -6
- data/lib/rspec/matchers/built_in/change.rb +89 -13
- data/lib/rspec/matchers/built_in/compound.rb +19 -3
- data/lib/rspec/matchers/built_in/contain_exactly.rb +17 -6
- data/lib/rspec/matchers/built_in/cover.rb +3 -0
- data/lib/rspec/matchers/built_in/eq.rb +20 -5
- data/lib/rspec/matchers/built_in/eql.rb +15 -3
- data/lib/rspec/matchers/built_in/equal.rb +23 -6
- data/lib/rspec/matchers/built_in/exist.rb +74 -10
- data/lib/rspec/matchers/built_in/has.rb +58 -3
- data/lib/rspec/matchers/built_in/include.rb +16 -1
- data/lib/rspec/matchers/built_in/match.rb +14 -4
- data/lib/rspec/matchers/built_in/operators.rb +16 -0
- data/lib/rspec/matchers/built_in/output.rb +47 -5
- data/lib/rspec/matchers/built_in/raise_error.rb +40 -23
- data/lib/rspec/matchers/built_in/respond_to.rb +37 -16
- data/lib/rspec/matchers/built_in/satisfy.rb +15 -0
- data/lib/rspec/matchers/built_in/start_and_end_with.rb +29 -14
- data/lib/rspec/matchers/built_in/throw_symbol.rb +32 -3
- data/lib/rspec/matchers/built_in/yield.rb +148 -44
- data/lib/rspec/matchers/composable.rb +48 -7
- data/lib/rspec/matchers/dsl.rb +45 -17
- data/lib/rspec/matchers/generated_descriptions.rb +7 -0
- data/lib/rspec/matchers/matcher_delegator.rb +6 -2
- data/lib/rspec/matchers/pretty.rb +15 -19
- metadata +33 -236
- metadata.gz.sig +0 -0
- data/features/README.md +0 -48
- data/features/Upgrade.md +0 -53
- data/features/built_in_matchers/README.md +0 -96
- data/features/built_in_matchers/be.feature +0 -175
- data/features/built_in_matchers/be_within.feature +0 -48
- data/features/built_in_matchers/comparisons.feature +0 -97
- data/features/built_in_matchers/contain_exactly.feature +0 -46
- data/features/built_in_matchers/cover.feature +0 -47
- data/features/built_in_matchers/end_with.feature +0 -48
- data/features/built_in_matchers/equality.feature +0 -136
- data/features/built_in_matchers/exist.feature +0 -45
- data/features/built_in_matchers/expect_change.feature +0 -59
- data/features/built_in_matchers/expect_error.feature +0 -144
- data/features/built_in_matchers/include.feature +0 -126
- data/features/built_in_matchers/match.feature +0 -51
- data/features/built_in_matchers/output.feature +0 -70
- data/features/built_in_matchers/predicates.feature +0 -161
- data/features/built_in_matchers/respond_to.feature +0 -84
- data/features/built_in_matchers/satisfy.feature +0 -33
- data/features/built_in_matchers/start_with.feature +0 -48
- data/features/built_in_matchers/throw_symbol.feature +0 -91
- data/features/built_in_matchers/types.feature +0 -116
- data/features/built_in_matchers/yield.feature +0 -161
- data/features/composing_matchers.feature +0 -250
- data/features/compound_expectations.feature +0 -45
- data/features/custom_matchers/access_running_example.feature +0 -53
- data/features/custom_matchers/define_diffable_matcher.feature +0 -27
- data/features/custom_matchers/define_matcher.feature +0 -340
- data/features/custom_matchers/define_matcher_outside_rspec.feature +0 -34
- data/features/custom_matchers/define_matcher_with_fluent_interface.feature +0 -24
- data/features/customized_message.feature +0 -39
- data/features/diffing.feature +0 -85
- data/features/implicit_docstrings.feature +0 -52
- data/features/step_definitions/additional_cli_steps.rb +0 -22
- data/features/support/env.rb +0 -21
- data/features/support/rubinius.rb +0 -6
- data/features/syntax_configuration.feature +0 -71
- data/features/test_frameworks/minitest.feature +0 -44
- data/lib/rspec-expectations.rb +0 -1
- data/lib/rspec/expectations/diff_presenter.rb +0 -141
- data/lib/rspec/expectations/differ.rb +0 -44
- data/lib/rspec/expectations/encoded_string.rb +0 -56
- data/spec/rspec/expectations/diff_presenter_spec.rb +0 -249
- data/spec/rspec/expectations/encoded_string_spec.rb +0 -74
- data/spec/rspec/expectations/expectation_target_spec.rb +0 -82
- data/spec/rspec/expectations/extensions/kernel_spec.rb +0 -67
- data/spec/rspec/expectations/fail_with_spec.rb +0 -114
- data/spec/rspec/expectations/handler_spec.rb +0 -205
- data/spec/rspec/expectations/minitest_integration_spec.rb +0 -27
- data/spec/rspec/expectations/syntax_spec.rb +0 -89
- data/spec/rspec/expectations_spec.rb +0 -12
- data/spec/rspec/matchers/aliased_matcher_spec.rb +0 -48
- data/spec/rspec/matchers/aliases_spec.rb +0 -449
- data/spec/rspec/matchers/built_in/base_matcher_spec.rb +0 -83
- data/spec/rspec/matchers/built_in/be_between_spec.rb +0 -159
- data/spec/rspec/matchers/built_in/be_instance_of_spec.rb +0 -63
- data/spec/rspec/matchers/built_in/be_kind_of_spec.rb +0 -41
- data/spec/rspec/matchers/built_in/be_spec.rb +0 -592
- data/spec/rspec/matchers/built_in/be_within_spec.rb +0 -141
- data/spec/rspec/matchers/built_in/change_spec.rb +0 -808
- data/spec/rspec/matchers/built_in/compound_spec.rb +0 -292
- data/spec/rspec/matchers/built_in/contain_exactly_spec.rb +0 -441
- data/spec/rspec/matchers/built_in/cover_spec.rb +0 -69
- data/spec/rspec/matchers/built_in/eq_spec.rb +0 -156
- data/spec/rspec/matchers/built_in/eql_spec.rb +0 -41
- data/spec/rspec/matchers/built_in/equal_spec.rb +0 -106
- data/spec/rspec/matchers/built_in/exist_spec.rb +0 -124
- data/spec/rspec/matchers/built_in/has_spec.rb +0 -161
- data/spec/rspec/matchers/built_in/include_spec.rb +0 -540
- data/spec/rspec/matchers/built_in/match_spec.rb +0 -102
- data/spec/rspec/matchers/built_in/operators_spec.rb +0 -252
- data/spec/rspec/matchers/built_in/output_spec.rb +0 -165
- data/spec/rspec/matchers/built_in/raise_error_spec.rb +0 -461
- data/spec/rspec/matchers/built_in/respond_to_spec.rb +0 -292
- data/spec/rspec/matchers/built_in/satisfy_spec.rb +0 -44
- data/spec/rspec/matchers/built_in/start_and_end_with_spec.rb +0 -253
- data/spec/rspec/matchers/built_in/throw_symbol_spec.rb +0 -135
- data/spec/rspec/matchers/built_in/yield_spec.rb +0 -627
- data/spec/rspec/matchers/configuration_spec.rb +0 -213
- data/spec/rspec/matchers/description_generation_spec.rb +0 -191
- data/spec/rspec/matchers/dsl_spec.rb +0 -895
- data/spec/rspec/matchers/legacy_spec.rb +0 -101
- data/spec/rspec/matchers_spec.rb +0 -74
- data/spec/spec_helper.rb +0 -85
- data/spec/support/matchers.rb +0 -22
- data/spec/support/shared_examples.rb +0 -35
@@ -1,126 +0,0 @@
|
|
1
|
-
Feature: include matcher
|
2
|
-
|
3
|
-
Use the include matcher to specify that a collection includes one or more
|
4
|
-
expected objects. This works on any object that responds to #include? (such
|
5
|
-
as a string or array):
|
6
|
-
|
7
|
-
```ruby
|
8
|
-
expect("a string").to include("a")
|
9
|
-
expect("a string").to include("str")
|
10
|
-
expect("a string").to include("str", "g")
|
11
|
-
expect("a string").not_to include("foo")
|
12
|
-
|
13
|
-
expect([1, 2]).to include(1)
|
14
|
-
expect([1, 2]).to include(1, 2)
|
15
|
-
expect([1, 2]).not_to include(17)
|
16
|
-
```
|
17
|
-
|
18
|
-
The matcher also provides flexible handling for hashes:
|
19
|
-
|
20
|
-
```ruby
|
21
|
-
expect(:a => 1, :b => 2).to include(:a)
|
22
|
-
expect(:a => 1, :b => 2).to include(:a, :b)
|
23
|
-
expect(:a => 1, :b => 2).to include(:a => 1)
|
24
|
-
expect(:a => 1, :b => 2).to include(:b => 2, :a => 1)
|
25
|
-
expect(:a => 1, :b => 2).not_to include(:c)
|
26
|
-
expect(:a => 1, :b => 2).not_to include(:a => 2)
|
27
|
-
expect(:a => 1, :b => 2).not_to include(:c => 3)
|
28
|
-
```
|
29
|
-
|
30
|
-
Scenario: array usage
|
31
|
-
Given a file named "array_include_matcher_spec.rb" with:
|
32
|
-
"""ruby
|
33
|
-
describe [1, 3, 7] do
|
34
|
-
it { should include(1) }
|
35
|
-
it { should include(3) }
|
36
|
-
it { should include(7) }
|
37
|
-
it { should include(1, 7) }
|
38
|
-
it { should include(1, 3, 7) }
|
39
|
-
it { should_not include(17) }
|
40
|
-
it { should_not include(43, 100) }
|
41
|
-
|
42
|
-
# deliberate failures
|
43
|
-
it { should include(4) }
|
44
|
-
it { should_not include(1) }
|
45
|
-
it { should_not include(3) }
|
46
|
-
it { should_not include(7) }
|
47
|
-
it { should_not include(1, 3, 7) }
|
48
|
-
|
49
|
-
# both of these should fail since it includes 1 but not 9
|
50
|
-
it { should include(1, 9) }
|
51
|
-
it { should_not include(1, 9) }
|
52
|
-
end
|
53
|
-
"""
|
54
|
-
When I run `rspec array_include_matcher_spec.rb`
|
55
|
-
Then the output should contain all of these:
|
56
|
-
| 14 examples, 7 failures |
|
57
|
-
| expected [1, 3, 7] to include 4 |
|
58
|
-
| expected [1, 3, 7] not to include 1 |
|
59
|
-
| expected [1, 3, 7] not to include 3 |
|
60
|
-
| expected [1, 3, 7] not to include 7 |
|
61
|
-
| expected [1, 3, 7] not to include 1, 3, and 7 |
|
62
|
-
| expected [1, 3, 7] to include 1 and 9 |
|
63
|
-
| expected [1, 3, 7] not to include 1 and 9 |
|
64
|
-
|
65
|
-
Scenario: string usage
|
66
|
-
Given a file named "string_include_matcher_spec.rb" with:
|
67
|
-
"""ruby
|
68
|
-
describe "a string" do
|
69
|
-
it { should include("str") }
|
70
|
-
it { should include("a", "str", "ng") }
|
71
|
-
it { should_not include("foo") }
|
72
|
-
it { should_not include("foo", "bar") }
|
73
|
-
|
74
|
-
# deliberate failures
|
75
|
-
it { should include("foo") }
|
76
|
-
it { should_not include("str") }
|
77
|
-
it { should include("str", "foo") }
|
78
|
-
it { should_not include("str", "foo") }
|
79
|
-
end
|
80
|
-
"""
|
81
|
-
When I run `rspec string_include_matcher_spec.rb`
|
82
|
-
Then the output should contain all of these:
|
83
|
-
| 8 examples, 4 failures |
|
84
|
-
| expected "a string" to include "foo" |
|
85
|
-
| expected "a string" not to include "str" |
|
86
|
-
| expected "a string" to include "str" and "foo" |
|
87
|
-
| expected "a string" not to include "str" and "foo" |
|
88
|
-
|
89
|
-
Scenario: hash usage
|
90
|
-
Given a file named "hash_include_matcher_spec.rb" with:
|
91
|
-
"""ruby
|
92
|
-
describe Hash do
|
93
|
-
subject { { :a => 7, :b => 5 } }
|
94
|
-
|
95
|
-
it { should include(:a) }
|
96
|
-
it { should include(:b, :a) }
|
97
|
-
it { should include(:a => 7) }
|
98
|
-
it { should include(:b => 5, :a => 7) }
|
99
|
-
it { should_not include(:c) }
|
100
|
-
it { should_not include(:c, :d) }
|
101
|
-
it { should_not include(:d => 2) }
|
102
|
-
it { should_not include(:a => 5) }
|
103
|
-
it { should_not include(:b => 7, :a => 5) }
|
104
|
-
|
105
|
-
# deliberate failures
|
106
|
-
it { should_not include(:a) }
|
107
|
-
it { should_not include(:b, :a) }
|
108
|
-
it { should_not include(:a => 7) }
|
109
|
-
it { should_not include(:a => 7, :b => 5) }
|
110
|
-
it { should include(:c) }
|
111
|
-
it { should include(:c, :d) }
|
112
|
-
it { should include(:d => 2) }
|
113
|
-
it { should include(:a => 5) }
|
114
|
-
it { should include(:a => 5, :b => 7) }
|
115
|
-
|
116
|
-
# Mixed cases--the hash includes one but not the other.
|
117
|
-
# All 4 of these cases should fail.
|
118
|
-
it { should include(:a, :d) }
|
119
|
-
it { should_not include(:a, :d) }
|
120
|
-
it { should include(:a => 7, :d => 3) }
|
121
|
-
it { should_not include(:a => 7, :d => 3) }
|
122
|
-
end
|
123
|
-
"""
|
124
|
-
When I run `rspec hash_include_matcher_spec.rb`
|
125
|
-
Then the output should contain "13 failure"
|
126
|
-
|
@@ -1,51 +0,0 @@
|
|
1
|
-
Feature: match matcher
|
2
|
-
|
3
|
-
The match matcher calls #match on the object, passing if #match returns a
|
4
|
-
truthy (not false or nil) value. Regexp and String both provide a #match
|
5
|
-
method.
|
6
|
-
|
7
|
-
```ruby
|
8
|
-
expect("a string").to match(/str/) # passes
|
9
|
-
expect("a string").to match(/foo/) # fails
|
10
|
-
expect(/foo/).to match("food") # passes
|
11
|
-
expect(/foo/).to match("drinks") # fails
|
12
|
-
```
|
13
|
-
|
14
|
-
This is equivalent to using the =~ matcher (see the operator matchers
|
15
|
-
feature for more details).
|
16
|
-
|
17
|
-
Scenario: string usage
|
18
|
-
Given a file named "string_match_spec.rb" with:
|
19
|
-
"""ruby
|
20
|
-
describe "a string" do
|
21
|
-
it { should match(/str/) }
|
22
|
-
it { should_not match(/foo/) }
|
23
|
-
|
24
|
-
# deliberate failures
|
25
|
-
it { should_not match(/str/) }
|
26
|
-
it { should match(/foo/) }
|
27
|
-
end
|
28
|
-
"""
|
29
|
-
When I run `rspec string_match_spec.rb`
|
30
|
-
Then the output should contain all of these:
|
31
|
-
| 4 examples, 2 failures |
|
32
|
-
| expected "a string" not to match /str/ |
|
33
|
-
| expected "a string" to match /foo/ |
|
34
|
-
|
35
|
-
Scenario: regular expression usage
|
36
|
-
Given a file named "regexp_match_spec.rb" with:
|
37
|
-
"""ruby
|
38
|
-
describe /foo/ do
|
39
|
-
it { should match("food") }
|
40
|
-
it { should_not match("drinks") }
|
41
|
-
|
42
|
-
# deliberate failures
|
43
|
-
it { should_not match("food") }
|
44
|
-
it { should match("drinks") }
|
45
|
-
end
|
46
|
-
"""
|
47
|
-
When I run `rspec regexp_match_spec.rb`
|
48
|
-
Then the output should contain all of these:
|
49
|
-
| 4 examples, 2 failures |
|
50
|
-
| expected /foo/ not to match "food" |
|
51
|
-
| expected /foo/ to match "drinks" |
|
@@ -1,70 +0,0 @@
|
|
1
|
-
Feature: output matcher
|
2
|
-
|
3
|
-
The `output` matcher provides a way to assert that the
|
4
|
-
has emitted content to either `$stdout` or `$stderr`.
|
5
|
-
|
6
|
-
With no arg, passes if the block outputs `to_stdout` or `to_stderr`.
|
7
|
-
With a string, passes if the blocks outputs that specific string
|
8
|
-
`to_stdout` or `to_stderr`. With a regexp or matcher, passes if the
|
9
|
-
blocks outputs a string `to_stdout` or `to_stderr` that matches.
|
10
|
-
|
11
|
-
Note: This matcher works by temporarily replacing `$stdout` or `$stderr`,
|
12
|
-
so it's not able to intercept stream output that explicitly uses `STDOUT`/`STDERR`
|
13
|
-
or that uses a reference to `$stdout`/`$stderr` that was stored before the
|
14
|
-
matcher is used.
|
15
|
-
|
16
|
-
Scenario: output_to_stdout matcher
|
17
|
-
Given a file named "output_to_stdout_spec.rb" with:
|
18
|
-
"""ruby
|
19
|
-
describe "output.to_stdout matcher" do
|
20
|
-
specify { expect { print('foo') }.to output.to_stdout }
|
21
|
-
specify { expect { print('foo') }.to output('foo').to_stdout }
|
22
|
-
specify { expect { print('foo') }.to output(/foo/).to_stdout }
|
23
|
-
specify { expect { }.to_not output.to_stdout }
|
24
|
-
specify { expect { print('foo') }.to_not output('bar').to_stdout }
|
25
|
-
specify { expect { print('foo') }.to_not output(/bar/).to_stdout }
|
26
|
-
|
27
|
-
# deliberate failures
|
28
|
-
specify { expect { }.to output.to_stdout }
|
29
|
-
specify { expect { }.to output('foo').to_stdout }
|
30
|
-
specify { expect { print('foo') }.to_not output.to_stdout }
|
31
|
-
specify { expect { print('foo') }.to output('bar').to_stdout }
|
32
|
-
specify { expect { print('foo') }.to output(/bar/).to_stdout }
|
33
|
-
end
|
34
|
-
"""
|
35
|
-
When I run `rspec output_to_stdout_spec.rb`
|
36
|
-
Then the output should contain all of these:
|
37
|
-
| 11 examples, 5 failures |
|
38
|
-
| expected block to output to stdout, but did not |
|
39
|
-
| expected block to not output to stdout, but did |
|
40
|
-
| expected block to output "bar" to stdout, but output "foo" |
|
41
|
-
| expected block to output "foo" to stdout, but output nothing |
|
42
|
-
| expected block to output /bar/ to stdout, but output "foo" |
|
43
|
-
|
44
|
-
Scenario: output_to_stderr matcher
|
45
|
-
Given a file named "output_to_stderr.rb" with:
|
46
|
-
"""ruby
|
47
|
-
describe "output_to_stderr matcher" do
|
48
|
-
specify { expect { warn('foo') }.to output.to_stderr }
|
49
|
-
specify { expect { warn('foo') }.to output("foo\n").to_stderr }
|
50
|
-
specify { expect { warn('foo') }.to output(/foo/).to_stderr }
|
51
|
-
specify { expect { }.to_not output.to_stderr }
|
52
|
-
specify { expect { warn('foo') }.to_not output('bar').to_stderr }
|
53
|
-
specify { expect { warn('foo') }.to_not output(/bar/).to_stderr }
|
54
|
-
|
55
|
-
# deliberate failures
|
56
|
-
specify { expect { }.to output.to_stderr }
|
57
|
-
specify { expect { }.to output('foo').to_stderr }
|
58
|
-
specify { expect { warn('foo') }.to_not output.to_stderr }
|
59
|
-
specify { expect { warn('foo') }.to output('bar').to_stderr }
|
60
|
-
specify { expect { warn('foo') }.to output(/bar/).to_stderr }
|
61
|
-
end
|
62
|
-
"""
|
63
|
-
When I run `rspec output_to_stderr.rb`
|
64
|
-
Then the output should contain all of these:
|
65
|
-
| 11 examples, 5 failures |
|
66
|
-
| expected block to output to stderr, but did not |
|
67
|
-
| expected block to not output to stderr, but did |
|
68
|
-
| expected block to output "bar" to stderr, but output "foo\n" |
|
69
|
-
| expected block to output "foo" to stderr, but output nothing |
|
70
|
-
| expected block to output /bar/ to stderr, but output "foo\n" |
|
@@ -1,161 +0,0 @@
|
|
1
|
-
Feature: predicate matchers
|
2
|
-
|
3
|
-
Ruby objects commonly provide predicate methods:
|
4
|
-
|
5
|
-
```ruby
|
6
|
-
7.zero? # => false
|
7
|
-
0.zero? # => true
|
8
|
-
[1].empty? # => false
|
9
|
-
[].empty? # => true
|
10
|
-
{ :a => 5 }.has_key?(:b) # => false
|
11
|
-
{ :b => 5 }.has_key?(:b) # => true
|
12
|
-
```
|
13
|
-
|
14
|
-
You could use a basic equality matcher to set expectations on these:
|
15
|
-
|
16
|
-
```ruby
|
17
|
-
expect(7.zero?).to eq true # fails with "expected true, got false (using ==)"
|
18
|
-
```
|
19
|
-
|
20
|
-
...but RSpec provides dynamic predicate matchers that are more readable and
|
21
|
-
provide better failure output.
|
22
|
-
|
23
|
-
For any predicate method, RSpec gives you a corresponding matcher. Simply
|
24
|
-
prefix the method with `be_` and remove the question mark. Examples:
|
25
|
-
|
26
|
-
```ruby
|
27
|
-
expect(7).not_to be_zero # calls 7.zero?
|
28
|
-
expect([]).to be_empty # calls [].empty?
|
29
|
-
expect(x).to be_multiple_of(3) # calls x.multiple_of?(3)
|
30
|
-
```
|
31
|
-
|
32
|
-
Alternately, for a predicate method that begins with `has_` like
|
33
|
-
`Hash#has_key?`, RSpec allows you to use an alternate form since `be_has_key`
|
34
|
-
makes no sense.
|
35
|
-
|
36
|
-
```ruby
|
37
|
-
expect(hash).to have_key(:foo) # calls hash.has_key?(:foo)
|
38
|
-
expect(array).not_to have_odd_values # calls array.has_odd_values?
|
39
|
-
```
|
40
|
-
|
41
|
-
In either case, RSpec provides nice, clear error messages, such as:
|
42
|
-
|
43
|
-
`expected zero? to return true, got false`
|
44
|
-
|
45
|
-
Calling private methods will also fail:
|
46
|
-
|
47
|
-
`expected private_method? to return true but it's a private method`
|
48
|
-
|
49
|
-
Any arguments passed to the matcher will be passed on to the predicate method.
|
50
|
-
|
51
|
-
Scenario: should be_zero (based on Fixnum#zero?)
|
52
|
-
Given a file named "should_be_zero_spec.rb" with:
|
53
|
-
"""ruby
|
54
|
-
describe 0 do
|
55
|
-
it { should be_zero }
|
56
|
-
end
|
57
|
-
|
58
|
-
describe 7 do
|
59
|
-
it { should be_zero } # deliberate failure
|
60
|
-
end
|
61
|
-
"""
|
62
|
-
When I run `rspec should_be_zero_spec.rb`
|
63
|
-
Then the output should contain "2 examples, 1 failure"
|
64
|
-
And the output should contain "expected zero? to return true, got false"
|
65
|
-
|
66
|
-
Scenario: should_not be_empty (based on Array#empty?)
|
67
|
-
Given a file named "should_not_be_empty_spec.rb" with:
|
68
|
-
"""ruby
|
69
|
-
describe [1, 2, 3] do
|
70
|
-
it { should_not be_empty }
|
71
|
-
end
|
72
|
-
|
73
|
-
describe [] do
|
74
|
-
it { should_not be_empty } # deliberate failure
|
75
|
-
end
|
76
|
-
"""
|
77
|
-
When I run `rspec should_not_be_empty_spec.rb`
|
78
|
-
Then the output should contain "2 examples, 1 failure"
|
79
|
-
And the output should contain "expected empty? to return false, got true"
|
80
|
-
|
81
|
-
Scenario: should have_key (based on Hash#has_key?)
|
82
|
-
Given a file named "should_have_key_spec.rb" with:
|
83
|
-
"""ruby
|
84
|
-
describe Hash do
|
85
|
-
subject { { :foo => 7 } }
|
86
|
-
it { should have_key(:foo) }
|
87
|
-
it { should have_key(:bar) } # deliberate failure
|
88
|
-
end
|
89
|
-
"""
|
90
|
-
When I run `rspec should_have_key_spec.rb`
|
91
|
-
Then the output should contain "2 examples, 1 failure"
|
92
|
-
And the output should contain "expected #has_key?(:bar) to return true, got false"
|
93
|
-
|
94
|
-
Scenario: should_not have_all_string_keys (based on custom #has_all_string_keys? method)
|
95
|
-
Given a file named "should_not_have_all_string_keys_spec.rb" with:
|
96
|
-
"""ruby
|
97
|
-
class Hash
|
98
|
-
def has_all_string_keys?
|
99
|
-
keys.all? { |k| String === k }
|
100
|
-
end
|
101
|
-
end
|
102
|
-
|
103
|
-
describe Hash do
|
104
|
-
context 'with symbol keys' do
|
105
|
-
subject { { :foo => 7, :bar => 5 } }
|
106
|
-
it { should_not have_all_string_keys }
|
107
|
-
end
|
108
|
-
|
109
|
-
context 'with string keys' do
|
110
|
-
subject { { 'foo' => 7, 'bar' => 5 } }
|
111
|
-
it { should_not have_all_string_keys } # deliberate failure
|
112
|
-
end
|
113
|
-
end
|
114
|
-
"""
|
115
|
-
When I run `rspec should_not_have_all_string_keys_spec.rb`
|
116
|
-
Then the output should contain "2 examples, 1 failure"
|
117
|
-
And the output should contain "expected #has_all_string_keys? to return false, got true"
|
118
|
-
|
119
|
-
Scenario: matcher arguments are passed on to the predicate method
|
120
|
-
Given a file named "predicate_matcher_argument_spec.rb" with:
|
121
|
-
"""ruby
|
122
|
-
class Fixnum
|
123
|
-
def multiple_of?(x)
|
124
|
-
(self % x).zero?
|
125
|
-
end
|
126
|
-
end
|
127
|
-
|
128
|
-
describe 12 do
|
129
|
-
it { should be_multiple_of(3) }
|
130
|
-
it { should_not be_multiple_of(7) }
|
131
|
-
|
132
|
-
# deliberate failures
|
133
|
-
it { should_not be_multiple_of(4) }
|
134
|
-
it { should be_multiple_of(5) }
|
135
|
-
end
|
136
|
-
"""
|
137
|
-
When I run `rspec predicate_matcher_argument_spec.rb`
|
138
|
-
Then the output should contain "4 examples, 2 failures"
|
139
|
-
And the output should contain "expected multiple_of?(4) to return false, got true"
|
140
|
-
And the output should contain "expected multiple_of?(5) to return true, got false"
|
141
|
-
|
142
|
-
Scenario: calling private method causes error
|
143
|
-
Given a file named "attempting_to_match_private_method_spec.rb" with:
|
144
|
-
"""ruby
|
145
|
-
class WithPrivateMethods
|
146
|
-
def secret?
|
147
|
-
true
|
148
|
-
end
|
149
|
-
private :secret?
|
150
|
-
end
|
151
|
-
|
152
|
-
describe 'private methods' do
|
153
|
-
subject { WithPrivateMethods.new }
|
154
|
-
|
155
|
-
# deliberate failure
|
156
|
-
it { should be_secret }
|
157
|
-
end
|
158
|
-
"""
|
159
|
-
When I run `rspec attempting_to_match_private_method_spec.rb`
|
160
|
-
Then the output should contain "1 example, 1 failure"
|
161
|
-
And the output should contain "expectation set on private method `secret?`"
|
@@ -1,84 +0,0 @@
|
|
1
|
-
Feature: respond_to matcher
|
2
|
-
|
3
|
-
Use the respond_to matcher to specify details of an object's interface. In
|
4
|
-
its most basic form:
|
5
|
-
|
6
|
-
```ruby
|
7
|
-
expect(obj).to respond_to(:foo) # pass if obj.respond_to?(:foo)
|
8
|
-
```
|
9
|
-
|
10
|
-
You can specify that an object responds to multiple messages in a single
|
11
|
-
statement with multiple arguments passed to the matcher:
|
12
|
-
|
13
|
-
```ruby
|
14
|
-
expect(obj).to respond_to(:foo, :bar) # passes if obj.respond_to?(:foo) && obj.respond_to?(:bar)
|
15
|
-
```
|
16
|
-
|
17
|
-
If the number of arguments accepted by the method is important to you,
|
18
|
-
you can specify that as well:
|
19
|
-
|
20
|
-
```ruby
|
21
|
-
expect(obj).to respond_to(:foo).with(1).argument
|
22
|
-
expect(obj).to respond_to(:bar).with(2).arguments
|
23
|
-
```
|
24
|
-
|
25
|
-
Note that this matcher relies entirely upon #respond_to?. If an object
|
26
|
-
dynamically responds to a message via #method_missing, but does not indicate
|
27
|
-
this via #respond_to?, then this matcher will give you false results.
|
28
|
-
|
29
|
-
Scenario: basic usage
|
30
|
-
Given a file named "respond_to_matcher_spec.rb" with:
|
31
|
-
"""ruby
|
32
|
-
describe "a string" do
|
33
|
-
it { should respond_to(:length) }
|
34
|
-
it { should respond_to(:hash, :class, :to_s) }
|
35
|
-
it { should_not respond_to(:to_model) }
|
36
|
-
it { should_not respond_to(:compact, :flatten) }
|
37
|
-
|
38
|
-
# deliberate failures
|
39
|
-
it { should respond_to(:to_model) }
|
40
|
-
it { should respond_to(:compact, :flatten) }
|
41
|
-
it { should_not respond_to(:length) }
|
42
|
-
it { should_not respond_to(:hash, :class, :to_s) }
|
43
|
-
|
44
|
-
# mixed examples--String responds to :length but not :flatten
|
45
|
-
# both specs should fail
|
46
|
-
it { should respond_to(:length, :flatten) }
|
47
|
-
it { should_not respond_to(:length, :flatten) }
|
48
|
-
end
|
49
|
-
"""
|
50
|
-
When I run `rspec respond_to_matcher_spec.rb`
|
51
|
-
Then the output should contain all of these:
|
52
|
-
| 10 examples, 6 failures |
|
53
|
-
| expected "a string" to respond to :to_model |
|
54
|
-
| expected "a string" to respond to :compact, :flatten |
|
55
|
-
| expected "a string" not to respond to :length |
|
56
|
-
| expected "a string" not to respond to :hash, :class, :to_s |
|
57
|
-
| expected "a string" to respond to :flatten |
|
58
|
-
| expected "a string" not to respond to :length |
|
59
|
-
|
60
|
-
Scenario: specify arguments
|
61
|
-
Given a file named "respond_to_matcher_argument_checking_spec.rb" with:
|
62
|
-
"""ruby
|
63
|
-
describe 7 do
|
64
|
-
it { should respond_to(:zero?).with(0).arguments }
|
65
|
-
it { should_not respond_to(:zero?).with(1).argument }
|
66
|
-
|
67
|
-
it { should respond_to(:between?).with(2).arguments }
|
68
|
-
it { should_not respond_to(:between?).with(7).arguments }
|
69
|
-
|
70
|
-
# deliberate failures
|
71
|
-
it { should respond_to(:zero?).with(1).argument }
|
72
|
-
it { should_not respond_to(:zero?).with(0).arguments }
|
73
|
-
|
74
|
-
it { should respond_to(:between?).with(7).arguments }
|
75
|
-
it { should_not respond_to(:between?).with(2).arguments }
|
76
|
-
end
|
77
|
-
"""
|
78
|
-
When I run `rspec respond_to_matcher_argument_checking_spec.rb`
|
79
|
-
Then the output should contain all of these:
|
80
|
-
| 8 examples, 4 failures |
|
81
|
-
| expected 7 to respond to :zero? with 1 argument |
|
82
|
-
| expected 7 not to respond to :zero? with 0 arguments |
|
83
|
-
| expected 7 to respond to :between? with 7 arguments |
|
84
|
-
| expected 7 not to respond to :between? with 2 arguments |
|