rspec-expectations 2.11.3 → 3.11.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.
Files changed (152) hide show
  1. checksums.yaml +7 -0
  2. checksums.yaml.gz.sig +0 -0
  3. data/.document +1 -1
  4. data/.yardopts +1 -1
  5. data/Changelog.md +1026 -21
  6. data/{License.txt → LICENSE.md} +5 -3
  7. data/README.md +174 -78
  8. data/lib/rspec/expectations/block_snippet_extractor.rb +253 -0
  9. data/lib/rspec/expectations/configuration.rb +230 -0
  10. data/lib/rspec/expectations/expectation_target.rb +130 -55
  11. data/lib/rspec/expectations/fail_with.rb +17 -33
  12. data/lib/rspec/expectations/failure_aggregator.rb +212 -0
  13. data/lib/rspec/expectations/handler.rb +163 -29
  14. data/lib/rspec/expectations/minitest_integration.rb +58 -0
  15. data/lib/rspec/expectations/syntax.rb +68 -54
  16. data/lib/rspec/expectations/version.rb +1 -1
  17. data/lib/rspec/expectations.rb +59 -24
  18. data/lib/rspec/matchers/aliased_matcher.rb +116 -0
  19. data/lib/rspec/matchers/built_in/all.rb +86 -0
  20. data/lib/rspec/matchers/built_in/base_matcher.rb +150 -20
  21. data/lib/rspec/matchers/built_in/be.rb +115 -109
  22. data/lib/rspec/matchers/built_in/be_between.rb +77 -0
  23. data/lib/rspec/matchers/built_in/be_instance_of.rb +16 -1
  24. data/lib/rspec/matchers/built_in/be_kind_of.rb +10 -1
  25. data/lib/rspec/matchers/built_in/be_within.rb +43 -17
  26. data/lib/rspec/matchers/built_in/change.rb +392 -75
  27. data/lib/rspec/matchers/built_in/compound.rb +290 -0
  28. data/lib/rspec/matchers/built_in/contain_exactly.rb +302 -0
  29. data/lib/rspec/matchers/built_in/count_expectation.rb +169 -0
  30. data/lib/rspec/matchers/built_in/cover.rb +3 -0
  31. data/lib/rspec/matchers/built_in/eq.rb +26 -8
  32. data/lib/rspec/matchers/built_in/eql.rb +19 -8
  33. data/lib/rspec/matchers/built_in/equal.rb +56 -19
  34. data/lib/rspec/matchers/built_in/exist.rb +74 -10
  35. data/lib/rspec/matchers/built_in/has.rb +141 -22
  36. data/lib/rspec/matchers/built_in/have_attributes.rb +114 -0
  37. data/lib/rspec/matchers/built_in/include.rb +175 -20
  38. data/lib/rspec/matchers/built_in/match.rb +95 -1
  39. data/lib/rspec/matchers/built_in/operators.rb +128 -0
  40. data/lib/rspec/matchers/built_in/output.rb +207 -0
  41. data/lib/rspec/matchers/built_in/raise_error.rb +212 -38
  42. data/lib/rspec/matchers/built_in/respond_to.rb +155 -29
  43. data/lib/rspec/matchers/built_in/satisfy.rb +39 -9
  44. data/lib/rspec/matchers/built_in/start_or_end_with.rb +94 -0
  45. data/lib/rspec/matchers/built_in/throw_symbol.rb +58 -14
  46. data/lib/rspec/matchers/built_in/yield.rb +252 -98
  47. data/lib/rspec/matchers/built_in.rb +47 -33
  48. data/lib/rspec/matchers/composable.rb +171 -0
  49. data/lib/rspec/matchers/dsl.rb +530 -10
  50. data/lib/rspec/matchers/english_phrasing.rb +58 -0
  51. data/lib/rspec/matchers/expecteds_for_multiple_diffs.rb +82 -0
  52. data/lib/rspec/matchers/fail_matchers.rb +42 -0
  53. data/lib/rspec/matchers/generated_descriptions.rb +15 -10
  54. data/lib/rspec/matchers/matcher_delegator.rb +35 -0
  55. data/lib/rspec/matchers/matcher_protocol.rb +105 -0
  56. data/lib/rspec/matchers.rb +604 -252
  57. data.tar.gz.sig +0 -0
  58. metadata +178 -278
  59. metadata.gz.sig +0 -0
  60. data/features/README.md +0 -49
  61. data/features/Upgrade.md +0 -53
  62. data/features/built_in_matchers/README.md +0 -90
  63. data/features/built_in_matchers/be.feature +0 -173
  64. data/features/built_in_matchers/be_within.feature +0 -46
  65. data/features/built_in_matchers/cover.feature +0 -45
  66. data/features/built_in_matchers/end_with.feature +0 -46
  67. data/features/built_in_matchers/equality.feature +0 -145
  68. data/features/built_in_matchers/exist.feature +0 -43
  69. data/features/built_in_matchers/expect_change.feature +0 -59
  70. data/features/built_in_matchers/expect_error.feature +0 -138
  71. data/features/built_in_matchers/have.feature +0 -103
  72. data/features/built_in_matchers/include.feature +0 -121
  73. data/features/built_in_matchers/match.feature +0 -50
  74. data/features/built_in_matchers/operators.feature +0 -221
  75. data/features/built_in_matchers/predicates.feature +0 -128
  76. data/features/built_in_matchers/respond_to.feature +0 -78
  77. data/features/built_in_matchers/satisfy.feature +0 -31
  78. data/features/built_in_matchers/start_with.feature +0 -46
  79. data/features/built_in_matchers/throw_symbol.feature +0 -85
  80. data/features/built_in_matchers/types.feature +0 -114
  81. data/features/built_in_matchers/yield.feature +0 -146
  82. data/features/custom_matchers/access_running_example.feature +0 -53
  83. data/features/custom_matchers/define_diffable_matcher.feature +0 -27
  84. data/features/custom_matchers/define_matcher.feature +0 -340
  85. data/features/custom_matchers/define_matcher_outside_rspec.feature +0 -38
  86. data/features/custom_matchers/define_matcher_with_fluent_interface.feature +0 -24
  87. data/features/customized_message.feature +0 -22
  88. data/features/diffing.feature +0 -85
  89. data/features/implicit_docstrings.feature +0 -52
  90. data/features/step_definitions/additional_cli_steps.rb +0 -22
  91. data/features/support/env.rb +0 -5
  92. data/features/syntax_configuration.feature +0 -68
  93. data/features/test_frameworks/test_unit.feature +0 -46
  94. data/lib/rspec/expectations/deprecation.rb +0 -38
  95. data/lib/rspec/expectations/differ.rb +0 -81
  96. data/lib/rspec/expectations/errors.rb +0 -9
  97. data/lib/rspec/expectations/extensions/array.rb +0 -9
  98. data/lib/rspec/expectations/extensions/object.rb +0 -39
  99. data/lib/rspec/expectations/extensions.rb +0 -2
  100. data/lib/rspec/matchers/be_close.rb +0 -9
  101. data/lib/rspec/matchers/built_in/have.rb +0 -108
  102. data/lib/rspec/matchers/built_in/match_array.rb +0 -45
  103. data/lib/rspec/matchers/built_in/start_and_end_with.rb +0 -48
  104. data/lib/rspec/matchers/compatibility.rb +0 -14
  105. data/lib/rspec/matchers/configuration.rb +0 -66
  106. data/lib/rspec/matchers/extensions/instance_eval_with_args.rb +0 -39
  107. data/lib/rspec/matchers/matcher.rb +0 -299
  108. data/lib/rspec/matchers/method_missing.rb +0 -12
  109. data/lib/rspec/matchers/operator_matcher.rb +0 -84
  110. data/lib/rspec/matchers/pretty.rb +0 -60
  111. data/lib/rspec-expectations.rb +0 -1
  112. data/spec/rspec/expectations/differ_spec.rb +0 -153
  113. data/spec/rspec/expectations/expectation_target_spec.rb +0 -65
  114. data/spec/rspec/expectations/extensions/kernel_spec.rb +0 -67
  115. data/spec/rspec/expectations/fail_with_spec.rb +0 -70
  116. data/spec/rspec/expectations/handler_spec.rb +0 -206
  117. data/spec/rspec/matchers/base_matcher_spec.rb +0 -60
  118. data/spec/rspec/matchers/be_close_spec.rb +0 -22
  119. data/spec/rspec/matchers/be_instance_of_spec.rb +0 -40
  120. data/spec/rspec/matchers/be_kind_of_spec.rb +0 -37
  121. data/spec/rspec/matchers/be_spec.rb +0 -452
  122. data/spec/rspec/matchers/be_within_spec.rb +0 -80
  123. data/spec/rspec/matchers/change_spec.rb +0 -528
  124. data/spec/rspec/matchers/configuration_spec.rb +0 -202
  125. data/spec/rspec/matchers/cover_spec.rb +0 -69
  126. data/spec/rspec/matchers/description_generation_spec.rb +0 -176
  127. data/spec/rspec/matchers/dsl_spec.rb +0 -57
  128. data/spec/rspec/matchers/eq_spec.rb +0 -54
  129. data/spec/rspec/matchers/eql_spec.rb +0 -41
  130. data/spec/rspec/matchers/equal_spec.rb +0 -60
  131. data/spec/rspec/matchers/exist_spec.rb +0 -110
  132. data/spec/rspec/matchers/has_spec.rb +0 -118
  133. data/spec/rspec/matchers/have_spec.rb +0 -461
  134. data/spec/rspec/matchers/include_spec.rb +0 -367
  135. data/spec/rspec/matchers/match_array_spec.rb +0 -124
  136. data/spec/rspec/matchers/match_spec.rb +0 -61
  137. data/spec/rspec/matchers/matcher_spec.rb +0 -434
  138. data/spec/rspec/matchers/matchers_spec.rb +0 -31
  139. data/spec/rspec/matchers/method_missing_spec.rb +0 -24
  140. data/spec/rspec/matchers/operator_matcher_spec.rb +0 -221
  141. data/spec/rspec/matchers/raise_error_spec.rb +0 -344
  142. data/spec/rspec/matchers/respond_to_spec.rb +0 -295
  143. data/spec/rspec/matchers/satisfy_spec.rb +0 -44
  144. data/spec/rspec/matchers/start_with_end_with_spec.rb +0 -182
  145. data/spec/rspec/matchers/throw_symbol_spec.rb +0 -116
  146. data/spec/rspec/matchers/yield_spec.rb +0 -402
  147. data/spec/spec_helper.rb +0 -27
  148. data/spec/support/classes.rb +0 -56
  149. data/spec/support/in_sub_process.rb +0 -31
  150. data/spec/support/matchers.rb +0 -22
  151. data/spec/support/ruby_version.rb +0 -10
  152. data/spec/support/shared_examples.rb +0 -13
@@ -1,138 +0,0 @@
1
- Feature: raise_error matcher
2
-
3
- Use the `raise_error` matcher to specify that a block of code raises an
4
- error. The most basic form passes if any error is thrown:
5
-
6
- expect { raise StandardError }.to raise_error
7
-
8
- You can use `raise_exception` instead if you prefer that wording:
9
-
10
- expect { 3 / 0 }.to raise_exception
11
-
12
- `raise_error` and `raise_exception` are functionally interchangeable, so use
13
- the one that makes the most sense to you in any given context.
14
-
15
- In addition to the basic form, above, there are a number of ways to specify
16
- details of an error/exception:
17
-
18
- expect { raise "oops" }.to raise_error
19
- expect { raise "oops" }.to raise_error(RuntimeError)
20
- expect { raise "oops" }.to raise_error("oops")
21
- expect { raise "oops" }.to raise_error(/op/)
22
- expect { raise "oops" }.to raise_error(RuntimeError, "oops")
23
- expect { raise "oops" }.to raise_error(RuntimeError, /op/)
24
-
25
- Scenario: expect any error
26
- Given a file named "example_spec" with:
27
- """
28
- describe "calling a missing method" do
29
- it "raises" do
30
- expect { Object.new.foo }.to raise_error
31
- end
32
- end
33
- """
34
- When I run `rspec example_spec`
35
- Then the example should pass
36
-
37
- Scenario: expect specific error
38
- Given a file named "example_spec" with:
39
- """
40
- describe "calling a missing method" do
41
- it "raises" do
42
- expect { Object.new.foo }.to raise_error(NameError)
43
- end
44
- end
45
- """
46
- When I run `rspec example_spec`
47
- Then the example should pass
48
-
49
- Scenario: match message with a string
50
- Given a file named "example_spec.rb" with:
51
- """
52
- describe "matching error message with string" do
53
- it "matches the error message" do
54
- expect { raise StandardError, 'this message exactly'}.
55
- to raise_error('this message exactly')
56
- end
57
- end
58
- """
59
- When I run `rspec example_spec.rb`
60
- Then the example should pass
61
-
62
- Scenario: match message with a regexp
63
- Given a file named "example_spec.rb" with:
64
- """
65
- describe "matching error message with regex" do
66
- it "matches the error message" do
67
- expect { raise StandardError, "my message" }.
68
- to raise_error(/my mess/)
69
- end
70
- end
71
- """
72
- When I run `rspec example_spec.rb`
73
- Then the example should pass
74
-
75
- Scenario: match type + message with string
76
- Given a file named "example_spec.rb" with:
77
- """
78
- describe "matching error message with string" do
79
- it "matches the error message" do
80
- expect { raise StandardError, 'this message exactly'}.
81
- to raise_error(StandardError, 'this message exactly')
82
- end
83
- end
84
- """
85
- When I run `rspec example_spec.rb`
86
- Then the example should pass
87
-
88
- Scenario: match type + message with regexp
89
- Given a file named "example_spec.rb" with:
90
- """
91
- describe "matching error message with regex" do
92
- it "matches the error message" do
93
- expect { raise StandardError, "my message" }.
94
- to raise_error(StandardError, /my mess/)
95
- end
96
- end
97
- """
98
- When I run `rspec example_spec.rb`
99
- Then the example should pass
100
-
101
- Scenario: set expectations on error object passed to block
102
- Given a file named "example_spec" with:
103
- """
104
- describe "#foo" do
105
- it "raises NameError" do
106
- expect { Object.new.foo }.to raise_error { |error|
107
- error.should be_a(NameError)
108
- }
109
- end
110
- end
111
- """
112
- When I run `rspec example_spec`
113
- Then the example should pass
114
-
115
- Scenario: expect no occurence of a specific error
116
- Given a file named "example_spec" with:
117
- """
118
- describe Object, "#public_instance_methods" do
119
- it "does not raise" do
120
- expect { Object.public_instance_methods }.
121
- to_not raise_error(NameError)
122
- end
123
- end
124
- """
125
- When I run `rspec example_spec`
126
- Then the example should pass
127
-
128
- Scenario: expect no error at all
129
- Given a file named "example_spec" with:
130
- """
131
- describe "#to_s" do
132
- it "does not raise" do
133
- expect { Object.new.to_s }.to_not raise_error
134
- end
135
- end
136
- """
137
- When I run `rspec example_spec`
138
- Then the example should pass
@@ -1,103 +0,0 @@
1
- Feature: have(n).items matcher
2
-
3
- RSpec provides several matchers that make it easy to set expectations about the
4
- size of a collection. There are three basic forms:
5
-
6
- * collection.should have(x).items
7
- * collection.should have\_at\_least(x).items
8
- * collection.should have\_at\_most(x).items
9
-
10
- In addition, #have_exactly is provided as an alias to #have.
11
-
12
- These work on any collection-like object--the object just needs to respond to #size
13
- or #length (or both). When the matcher is called directly on a collection object,
14
- the #items call is pure syntactic sugar. You can use anything you want here. These
15
- are equivalent:
16
-
17
- * collection.should have(x).items
18
- * collection.should have(x).things
19
-
20
- You can also use this matcher on a non-collection object that returns a collection
21
- from one of its methods. For example, Dir#entries returns an array, so you could
22
- set an expectation using the following:
23
-
24
- Dir.new("my/directory").should have(7).entries
25
-
26
- Scenario: have(x).items on a collection
27
- Given a file named "have_items_spec.rb" with:
28
- """
29
- describe [1, 2, 3] do
30
- it { should have(3).items }
31
- it { should_not have(2).items }
32
- it { should_not have(4).items }
33
-
34
- it { should have_exactly(3).items }
35
- it { should_not have_exactly(2).items }
36
- it { should_not have_exactly(4).items }
37
-
38
- it { should have_at_least(2).items }
39
- it { should have_at_most(4).items }
40
-
41
- # deliberate failures
42
- it { should_not have(3).items }
43
- it { should have(2).items }
44
- it { should have(4).items }
45
-
46
- it { should_not have_exactly(3).items }
47
- it { should have_exactly(2).items }
48
- it { should have_exactly(4).items }
49
-
50
- it { should have_at_least(4).items }
51
- it { should have_at_most(2).items }
52
- end
53
- """
54
- When I run `rspec have_items_spec.rb`
55
- Then the output should contain "16 examples, 8 failures"
56
- And the output should contain "expected target not to have 3 items, got 3"
57
- And the output should contain "expected 2 items, got 3"
58
- And the output should contain "expected 4 items, got 3"
59
- And the output should contain "expected at least 4 items, got 3"
60
- And the output should contain "expected at most 2 items, got 3"
61
-
62
- Scenario: have(x).words on a String when String#words is defined
63
- Given a file named "have_words_spec.rb" with:
64
- """
65
- class String
66
- def words
67
- split(' ')
68
- end
69
- end
70
-
71
- describe "a sentence with some words" do
72
- it { should have(5).words }
73
- it { should_not have(4).words }
74
- it { should_not have(6).words }
75
-
76
- it { should have_exactly(5).words }
77
- it { should_not have_exactly(4).words }
78
- it { should_not have_exactly(6).words }
79
-
80
- it { should have_at_least(4).words }
81
- it { should have_at_most(6).words }
82
-
83
- # deliberate failures
84
- it { should_not have(5).words }
85
- it { should have(4).words }
86
- it { should have(6).words }
87
-
88
- it { should_not have_exactly(5).words }
89
- it { should have_exactly(4).words }
90
- it { should have_exactly(6).words }
91
-
92
- it { should have_at_least(6).words }
93
- it { should have_at_most(4).words }
94
- end
95
- """
96
- When I run `rspec have_words_spec.rb`
97
- Then the output should contain "16 examples, 8 failures"
98
- And the output should contain "expected target not to have 5 words, got 5"
99
- And the output should contain "expected 4 words, got 5"
100
- And the output should contain "expected 6 words, got 5"
101
- And the output should contain "expected at least 6 words, got 5"
102
- And the output should contain "expected at most 4 words, got 5"
103
-
@@ -1,121 +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
- "a string".should include("a")
8
- "a string".should include("str")
9
- "a string".should include("str", "g")
10
- "a string".should_not include("foo")
11
-
12
- [1, 2].should include(1)
13
- [1, 2].should include(1, 2)
14
- [1, 2].should_not include(17)
15
-
16
- The matcher also provides flexible handling for hashes:
17
-
18
- {:a => 1, :b => 2}.should include(:a)
19
- {:a => 1, :b => 2}.should include(:a, :b)
20
- {:a => 1, :b => 2}.should include(:a => 1)
21
- {:a => 1, :b => 2}.should include(:b => 2, :a => 1)
22
- {:a => 1, :b => 2}.should_not include(:c)
23
- {:a => 1, :b => 2}.should_not include(:a => 2)
24
- {:a => 1, :b => 2}.should_not include(:c => 3)
25
-
26
- Scenario: array usage
27
- Given a file named "array_include_matcher_spec.rb" with:
28
- """
29
- describe [1, 3, 7] do
30
- it { should include(1) }
31
- it { should include(3) }
32
- it { should include(7) }
33
- it { should include(1, 7) }
34
- it { should include(1, 3, 7) }
35
- it { should_not include(17) }
36
- it { should_not include(43, 100) }
37
-
38
- # deliberate failures
39
- it { should include(4) }
40
- it { should_not include(1) }
41
- it { should_not include(3) }
42
- it { should_not include(7) }
43
- it { should_not include(1, 3, 7) }
44
-
45
- # both of these should fail since it includes 1 but not 9
46
- it { should include(1, 9) }
47
- it { should_not include(1, 9) }
48
- end
49
- """
50
- When I run `rspec array_include_matcher_spec.rb`
51
- Then the output should contain all of these:
52
- | 14 examples, 7 failures |
53
- | expected [1, 3, 7] to include 4 |
54
- | expected [1, 3, 7] not to include 1 |
55
- | expected [1, 3, 7] not to include 3 |
56
- | expected [1, 3, 7] not to include 7 |
57
- | expected [1, 3, 7] not to include 1, 3, and 7 |
58
- | expected [1, 3, 7] to include 1 and 9 |
59
- | expected [1, 3, 7] not to include 1 and 9 |
60
-
61
- Scenario: string usage
62
- Given a file named "string_include_matcher_spec.rb" with:
63
- """
64
- describe "a string" do
65
- it { should include("str") }
66
- it { should include("a", "str", "ng") }
67
- it { should_not include("foo") }
68
- it { should_not include("foo", "bar") }
69
-
70
- # deliberate failures
71
- it { should include("foo") }
72
- it { should_not include("str") }
73
- it { should include("str", "foo") }
74
- it { should_not include("str", "foo") }
75
- end
76
- """
77
- When I run `rspec string_include_matcher_spec.rb`
78
- Then the output should contain all of these:
79
- | 8 examples, 4 failures |
80
- | expected "a string" to include "foo" |
81
- | expected "a string" not to include "str" |
82
- | expected "a string" to include "str" and "foo" |
83
- | expected "a string" not to include "str" and "foo" |
84
-
85
- Scenario: hash usage
86
- Given a file named "hash_include_matcher_spec.rb" with:
87
- """
88
- describe Hash do
89
- subject { { :a => 7, :b => 5 } }
90
-
91
- it { should include(:a) }
92
- it { should include(:b, :a) }
93
- it { should include(:a => 7) }
94
- it { should include(:b => 5, :a => 7) }
95
- it { should_not include(:c) }
96
- it { should_not include(:c, :d) }
97
- it { should_not include(:d => 2) }
98
- it { should_not include(:a => 5) }
99
- it { should_not include(:b => 7, :a => 5) }
100
-
101
- # deliberate failures
102
- it { should_not include(:a) }
103
- it { should_not include(:b, :a) }
104
- it { should_not include(:a => 7) }
105
- it { should_not include(:a => 7, :b => 5) }
106
- it { should include(:c) }
107
- it { should include(:c, :d) }
108
- it { should include(:d => 2) }
109
- it { should include(:a => 5) }
110
- it { should include(:a => 5, :b => 7) }
111
-
112
- # Mixed cases--the hash includes one but not the other.
113
- # All 4 of these cases should fail.
114
- it { should include(:a, :d) }
115
- it { should_not include(:a, :d) }
116
- it { should include(:a => 7, :d => 3) }
117
- it { should_not include(:a => 7, :d => 3) }
118
- end
119
- """
120
- When I run `rspec hash_include_matcher_spec.rb`
121
- Then the output should contain "13 failure"
@@ -1,50 +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
- "a string".should match(/str/) # passes
8
- "a string".should match(/foo/) # fails
9
- /foo/.should match("food") # passes
10
- /foo/.should match("drinks") # fails
11
-
12
- This is equivalent to using the =~ matcher (see the operator matchers
13
- feature for more details).
14
-
15
- Scenario: string usage
16
- Given a file named "string_match_spec.rb" with:
17
- """
18
- describe "a string" do
19
- it { should match(/str/) }
20
- it { should_not match(/foo/) }
21
-
22
- # deliberate failures
23
- it { should_not match(/str/) }
24
- it { should match(/foo/) }
25
- end
26
- """
27
- When I run `rspec string_match_spec.rb`
28
- Then the output should contain all of these:
29
- | 4 examples, 2 failures |
30
- | expected "a string" not to match /str/ |
31
- | expected "a string" to match /foo/ |
32
-
33
- Scenario: regular expression usage
34
- Given a file named "regexp_match_spec.rb" with:
35
- """
36
- describe /foo/ do
37
- it { should match("food") }
38
- it { should_not match("drinks") }
39
-
40
- # deliberate failures
41
- it { should_not match("food") }
42
- it { should match("drinks") }
43
- end
44
- """
45
- When I run `rspec regexp_match_spec.rb`
46
- Then the output should contain all of these:
47
- | 4 examples, 2 failures |
48
- | expected /foo/ not to match "food" |
49
- | expected /foo/ to match "drinks" |
50
-
@@ -1,221 +0,0 @@
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
-