rubocop-rspec 1.7.0 → 3.0.2

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 (193) hide show
  1. checksums.yaml +5 -5
  2. data/CHANGELOG.md +955 -79
  3. data/CODE_OF_CONDUCT.md +17 -0
  4. data/MIT-LICENSE.md +1 -2
  5. data/README.md +35 -35
  6. data/config/default.yml +940 -52
  7. data/config/obsoletion.yml +30 -0
  8. data/lib/rubocop/cop/rspec/align_left_let_brace.rb +49 -0
  9. data/lib/rubocop/cop/rspec/align_right_let_brace.rb +49 -0
  10. data/lib/rubocop/cop/rspec/any_instance.rb +10 -13
  11. data/lib/rubocop/cop/rspec/around_block.rb +97 -0
  12. data/lib/rubocop/cop/rspec/base.rb +26 -0
  13. data/lib/rubocop/cop/rspec/be.rb +39 -0
  14. data/lib/rubocop/cop/rspec/be_empty.rb +45 -0
  15. data/lib/rubocop/cop/rspec/be_eq.rb +47 -0
  16. data/lib/rubocop/cop/rspec/be_eql.rb +18 -15
  17. data/lib/rubocop/cop/rspec/be_nil.rb +74 -0
  18. data/lib/rubocop/cop/rspec/before_after_all.rb +45 -0
  19. data/lib/rubocop/cop/rspec/change_by_zero.rb +184 -0
  20. data/lib/rubocop/cop/rspec/class_check.rb +101 -0
  21. data/lib/rubocop/cop/rspec/contain_exactly.rb +56 -0
  22. data/lib/rubocop/cop/rspec/context_method.rb +57 -0
  23. data/lib/rubocop/cop/rspec/context_wording.rb +117 -0
  24. data/lib/rubocop/cop/rspec/describe_class.rb +52 -21
  25. data/lib/rubocop/cop/rspec/describe_method.rb +26 -11
  26. data/lib/rubocop/cop/rspec/describe_symbol.rb +37 -0
  27. data/lib/rubocop/cop/rspec/described_class.rb +181 -34
  28. data/lib/rubocop/cop/rspec/described_class_module_wrapping.rb +38 -0
  29. data/lib/rubocop/cop/rspec/dialect.rb +84 -0
  30. data/lib/rubocop/cop/rspec/duplicated_metadata.rb +58 -0
  31. data/lib/rubocop/cop/rspec/empty_example_group.rb +134 -47
  32. data/lib/rubocop/cop/rspec/empty_hook.rb +49 -0
  33. data/lib/rubocop/cop/rspec/empty_line_after_example.rb +82 -0
  34. data/lib/rubocop/cop/rspec/empty_line_after_example_group.rb +42 -0
  35. data/lib/rubocop/cop/rspec/empty_line_after_final_let.rb +40 -0
  36. data/lib/rubocop/cop/rspec/empty_line_after_hook.rb +82 -0
  37. data/lib/rubocop/cop/rspec/empty_line_after_subject.rb +36 -0
  38. data/lib/rubocop/cop/rspec/empty_metadata.rb +46 -0
  39. data/lib/rubocop/cop/rspec/empty_output.rb +47 -0
  40. data/lib/rubocop/cop/rspec/eq.rb +47 -0
  41. data/lib/rubocop/cop/rspec/example_length.rb +38 -20
  42. data/lib/rubocop/cop/rspec/example_without_description.rb +98 -0
  43. data/lib/rubocop/cop/rspec/example_wording.rb +117 -27
  44. data/lib/rubocop/cop/rspec/excessive_docstring_spacing.rb +110 -0
  45. data/lib/rubocop/cop/rspec/expect_actual.rb +46 -20
  46. data/lib/rubocop/cop/rspec/expect_change.rb +86 -0
  47. data/lib/rubocop/cop/rspec/expect_in_hook.rb +50 -0
  48. data/lib/rubocop/cop/rspec/expect_in_let.rb +42 -0
  49. data/lib/rubocop/cop/rspec/expect_output.rb +50 -0
  50. data/lib/rubocop/cop/rspec/focus.rb +79 -25
  51. data/lib/rubocop/cop/rspec/hook_argument.rb +48 -36
  52. data/lib/rubocop/cop/rspec/hooks_before_examples.rb +81 -0
  53. data/lib/rubocop/cop/rspec/identical_equality_assertion.rb +37 -0
  54. data/lib/rubocop/cop/rspec/implicit_block_expectation.rb +68 -0
  55. data/lib/rubocop/cop/rspec/implicit_expect.rb +100 -0
  56. data/lib/rubocop/cop/rspec/implicit_subject.rb +167 -0
  57. data/lib/rubocop/cop/rspec/indexed_let.rb +112 -0
  58. data/lib/rubocop/cop/rspec/instance_spy.rb +74 -0
  59. data/lib/rubocop/cop/rspec/instance_variable.rb +28 -14
  60. data/lib/rubocop/cop/rspec/is_expected_specify.rb +45 -0
  61. data/lib/rubocop/cop/rspec/it_behaves_like.rb +49 -0
  62. data/lib/rubocop/cop/rspec/iterated_expectation.rb +74 -0
  63. data/lib/rubocop/cop/rspec/leading_subject.rb +57 -29
  64. data/lib/rubocop/cop/rspec/leaky_constant_declaration.rb +127 -0
  65. data/lib/rubocop/cop/rspec/let_before_examples.rb +101 -0
  66. data/lib/rubocop/cop/rspec/let_setup.rb +32 -16
  67. data/lib/rubocop/cop/rspec/match_array.rb +59 -0
  68. data/lib/rubocop/cop/rspec/message_chain.rb +10 -15
  69. data/lib/rubocop/cop/rspec/message_expectation.rb +12 -9
  70. data/lib/rubocop/cop/rspec/message_spies.rb +88 -0
  71. data/lib/rubocop/cop/rspec/metadata_style.rb +202 -0
  72. data/lib/rubocop/cop/rspec/missing_example_group_argument.rb +35 -0
  73. data/lib/rubocop/cop/rspec/missing_expectation_target_method.rb +54 -0
  74. data/lib/rubocop/cop/rspec/mixin/comments_help.rb +38 -0
  75. data/lib/rubocop/cop/rspec/mixin/empty_line_separation.rb +59 -0
  76. data/lib/rubocop/cop/rspec/mixin/file_help.rb +14 -0
  77. data/lib/rubocop/cop/rspec/mixin/final_end_location.rb +19 -0
  78. data/lib/rubocop/cop/rspec/mixin/inside_example_group.rb +29 -0
  79. data/lib/rubocop/cop/rspec/mixin/location_help.rb +37 -0
  80. data/lib/rubocop/cop/rspec/mixin/metadata.rb +63 -0
  81. data/lib/rubocop/cop/rspec/mixin/namespace.rb +23 -0
  82. data/lib/rubocop/cop/rspec/mixin/skip_or_pending.rb +39 -0
  83. data/lib/rubocop/cop/rspec/mixin/top_level_group.rb +54 -0
  84. data/lib/rubocop/cop/rspec/mixin/variable.rb +21 -0
  85. data/lib/rubocop/cop/rspec/multiple_describes.rb +14 -12
  86. data/lib/rubocop/cop/rspec/multiple_expectations.rb +86 -26
  87. data/lib/rubocop/cop/rspec/multiple_memoized_helpers.rb +146 -0
  88. data/lib/rubocop/cop/rspec/multiple_subjects.rb +97 -0
  89. data/lib/rubocop/cop/rspec/named_subject.rb +107 -27
  90. data/lib/rubocop/cop/rspec/nested_groups.rb +84 -47
  91. data/lib/rubocop/cop/rspec/no_expectation_example.rb +102 -0
  92. data/lib/rubocop/cop/rspec/not_to_not.rb +30 -27
  93. data/lib/rubocop/cop/rspec/overwriting_setup.rb +74 -0
  94. data/lib/rubocop/cop/rspec/pending.rb +80 -0
  95. data/lib/rubocop/cop/rspec/pending_without_reason.rb +159 -0
  96. data/lib/rubocop/cop/rspec/predicate_matcher.rb +341 -0
  97. data/lib/rubocop/cop/rspec/receive_counts.rb +89 -0
  98. data/lib/rubocop/cop/rspec/receive_messages.rb +161 -0
  99. data/lib/rubocop/cop/rspec/receive_never.rb +41 -0
  100. data/lib/rubocop/cop/rspec/redundant_around.rb +65 -0
  101. data/lib/rubocop/cop/rspec/redundant_predicate_matcher.rb +67 -0
  102. data/lib/rubocop/cop/rspec/remove_const.rb +39 -0
  103. data/lib/rubocop/cop/rspec/repeated_description.rb +98 -0
  104. data/lib/rubocop/cop/rspec/repeated_example.rb +53 -0
  105. data/lib/rubocop/cop/rspec/repeated_example_group_body.rb +100 -0
  106. data/lib/rubocop/cop/rspec/repeated_example_group_description.rb +96 -0
  107. data/lib/rubocop/cop/rspec/repeated_include_example.rb +105 -0
  108. data/lib/rubocop/cop/rspec/repeated_subject_call.rb +125 -0
  109. data/lib/rubocop/cop/rspec/return_from_stub.rb +169 -0
  110. data/lib/rubocop/cop/rspec/scattered_let.rb +59 -0
  111. data/lib/rubocop/cop/rspec/scattered_setup.rb +92 -0
  112. data/lib/rubocop/cop/rspec/shared_context.rb +107 -0
  113. data/lib/rubocop/cop/rspec/shared_examples.rb +125 -0
  114. data/lib/rubocop/cop/rspec/single_argument_message_chain.rb +93 -0
  115. data/lib/rubocop/cop/rspec/skip_block_inside_example.rb +46 -0
  116. data/lib/rubocop/cop/rspec/sort_metadata.rb +71 -0
  117. data/lib/rubocop/cop/rspec/spec_file_path_format.rb +133 -0
  118. data/lib/rubocop/cop/rspec/spec_file_path_suffix.rb +40 -0
  119. data/lib/rubocop/cop/rspec/stubbed_mock.rb +176 -0
  120. data/lib/rubocop/cop/rspec/subject_declaration.rb +46 -0
  121. data/lib/rubocop/cop/rspec/subject_stub.rb +93 -74
  122. data/lib/rubocop/cop/rspec/undescriptive_literals_description.rb +69 -0
  123. data/lib/rubocop/cop/rspec/unspecified_exception.rb +67 -0
  124. data/lib/rubocop/cop/rspec/variable_definition.rb +77 -0
  125. data/lib/rubocop/cop/rspec/variable_name.rb +68 -0
  126. data/lib/rubocop/cop/rspec/verified_double_reference.rb +111 -0
  127. data/lib/rubocop/cop/rspec/verified_doubles.rb +28 -14
  128. data/lib/rubocop/cop/rspec/void_expect.rb +60 -0
  129. data/lib/rubocop/cop/rspec/yield.rb +82 -0
  130. data/lib/rubocop/cop/rspec_cops.rb +112 -0
  131. data/lib/rubocop/rspec/align_let_brace.rb +63 -0
  132. data/lib/rubocop/rspec/concept.rb +33 -0
  133. data/lib/rubocop/rspec/config_formatter.rb +27 -4
  134. data/lib/rubocop/rspec/cop/generator.rb +25 -0
  135. data/lib/rubocop/rspec/corrector/move_node.rb +51 -0
  136. data/lib/rubocop/rspec/description_extractor.rb +60 -18
  137. data/lib/rubocop/rspec/example.rb +37 -0
  138. data/lib/rubocop/rspec/example_group.rb +67 -0
  139. data/lib/rubocop/rspec/hook.rb +79 -0
  140. data/lib/rubocop/rspec/inject.rb +3 -1
  141. data/lib/rubocop/rspec/language.rb +184 -41
  142. data/lib/rubocop/rspec/node.rb +19 -0
  143. data/lib/rubocop/rspec/shared_contexts/default_rspec_language_config_context.rb +29 -0
  144. data/lib/rubocop/rspec/version.rb +1 -1
  145. data/lib/rubocop/rspec/wording.rb +61 -19
  146. data/lib/rubocop/rspec.rb +6 -2
  147. data/lib/rubocop-rspec.rb +45 -34
  148. metadata +130 -195
  149. data/Gemfile +0 -13
  150. data/Rakefile +0 -48
  151. data/lib/rubocop/cop/rspec/file_path.rb +0 -83
  152. data/lib/rubocop/rspec/language/node_pattern.rb +0 -16
  153. data/lib/rubocop/rspec/spec_only.rb +0 -61
  154. data/lib/rubocop/rspec/top_level_describe.rb +0 -61
  155. data/lib/rubocop/rspec/util.rb +0 -19
  156. data/rubocop-rspec.gemspec +0 -42
  157. data/spec/expect_violation/expectation_spec.rb +0 -85
  158. data/spec/project/changelog_spec.rb +0 -81
  159. data/spec/project/default_config_spec.rb +0 -52
  160. data/spec/project/project_requires_spec.rb +0 -8
  161. data/spec/rubocop/cop/rspec/any_instance_spec.rb +0 -30
  162. data/spec/rubocop/cop/rspec/be_eql_spec.rb +0 -59
  163. data/spec/rubocop/cop/rspec/describe_class_spec.rb +0 -113
  164. data/spec/rubocop/cop/rspec/describe_method_spec.rb +0 -32
  165. data/spec/rubocop/cop/rspec/described_class_spec.rb +0 -219
  166. data/spec/rubocop/cop/rspec/empty_example_group_spec.rb +0 -79
  167. data/spec/rubocop/cop/rspec/example_length_spec.rb +0 -117
  168. data/spec/rubocop/cop/rspec/example_wording_spec.rb +0 -82
  169. data/spec/rubocop/cop/rspec/expect_actual_spec.rb +0 -136
  170. data/spec/rubocop/cop/rspec/file_path_spec.rb +0 -236
  171. data/spec/rubocop/cop/rspec/focus_spec.rb +0 -130
  172. data/spec/rubocop/cop/rspec/hook_argument_spec.rb +0 -189
  173. data/spec/rubocop/cop/rspec/instance_variable_spec.rb +0 -75
  174. data/spec/rubocop/cop/rspec/leading_subject_spec.rb +0 -54
  175. data/spec/rubocop/cop/rspec/let_setup_spec.rb +0 -66
  176. data/spec/rubocop/cop/rspec/message_chain_spec.rb +0 -21
  177. data/spec/rubocop/cop/rspec/message_expectation_spec.rb +0 -63
  178. data/spec/rubocop/cop/rspec/multiple_describes_spec.rb +0 -28
  179. data/spec/rubocop/cop/rspec/multiple_expectations_spec.rb +0 -84
  180. data/spec/rubocop/cop/rspec/named_subject_spec.rb +0 -62
  181. data/spec/rubocop/cop/rspec/nested_groups_spec.rb +0 -55
  182. data/spec/rubocop/cop/rspec/not_to_not_spec.rb +0 -57
  183. data/spec/rubocop/cop/rspec/subject_stub_spec.rb +0 -183
  184. data/spec/rubocop/cop/rspec/verified_doubles_spec.rb +0 -71
  185. data/spec/rubocop/rspec/config_formatter_spec.rb +0 -48
  186. data/spec/rubocop/rspec/description_extractor_spec.rb +0 -35
  187. data/spec/rubocop/rspec/language/selector_set_spec.rb +0 -29
  188. data/spec/rubocop/rspec/spec_only_spec.rb +0 -97
  189. data/spec/rubocop/rspec/util/one_spec.rb +0 -21
  190. data/spec/rubocop/rspec/wording_spec.rb +0 -44
  191. data/spec/shared/rspec_only_cop_behavior.rb +0 -68
  192. data/spec/spec_helper.rb +0 -41
  193. data/spec/support/expect_violation.rb +0 -166
@@ -1,236 +0,0 @@
1
- describe RuboCop::Cop::RSpec::FilePath, :config do
2
- subject(:cop) { described_class.new(config) }
3
-
4
- shared_examples 'invalid spec path' do |source, expected:, actual:|
5
- context "when `#{source}` is defined in #{actual}" do
6
- before do
7
- inspect_source(cop, source, actual)
8
- end
9
-
10
- it 'flags an offense' do
11
- expect(cop.offenses.size).to eq(1)
12
- end
13
-
14
- it 'registers the offense on line 1' do
15
- expect(cop.offenses.map(&:line)).to eq([1])
16
- end
17
-
18
- it 'adds a message saying what the path should end with' do
19
- expect(cop.messages).to eql(["Spec path should end with `#{expected}`"])
20
- end
21
- end
22
- end
23
-
24
- include_examples 'invalid spec path',
25
- "describe MyClass, 'foo' do; end",
26
- expected: 'my_class*foo*_spec.rb',
27
- actual: 'wrong_path_foo_spec.rb'
28
-
29
- include_examples 'invalid spec path',
30
- "describe MyClass, '#foo' do; end",
31
- expected: 'my_class*foo*_spec.rb',
32
- actual: 'wrong_class_foo_spec.rb'
33
-
34
- include_examples 'invalid spec path',
35
- "describe MyClass, '#foo' do; end",
36
- expected: 'my_class*foo*_spec.rb',
37
- actual: 'my_class/foo_spec.rb.rb'
38
-
39
- include_examples 'invalid spec path',
40
- "describe MyClass, '#foo' do; end",
41
- expected: 'my_class*foo*_spec.rb',
42
- actual: 'my_class/foo_specorb'
43
-
44
- include_examples 'invalid spec path',
45
- "describe MyClass, '#foo', blah: :blah do; end",
46
- expected: 'my_class*foo*_spec.rb',
47
- actual: 'wrong_class_foo_spec.rb'
48
-
49
- include_examples 'invalid spec path',
50
- 'describe MyClass do; end',
51
- expected: 'my_class*_spec.rb',
52
- actual: 'wrong_class_spec.rb'
53
-
54
- include_examples 'invalid spec path',
55
- 'describe MyClass, :foo do; end',
56
- expected: 'my_class*_spec.rb',
57
- actual: 'wrong_class_spec.rb'
58
-
59
- it 'skips specs that do not describe a class / method' do
60
- inspect_source(
61
- cop,
62
- "describe 'Test something' do; end",
63
- 'some/class/spec.rb'
64
- )
65
- expect(cop.offenses).to be_empty
66
- end
67
-
68
- it 'skips specs that do have multiple top level describes' do
69
- inspect_source(
70
- cop,
71
- [
72
- "describe MyClass, 'do_this' do; end",
73
- "describe MyClass, 'do_that' do; end"
74
- ],
75
- 'some/class/spec.rb'
76
- )
77
- expect(cop.offenses).to be_empty
78
- end
79
-
80
- it 'checks class specs' do
81
- inspect_source(
82
- cop,
83
- 'describe Some::Class do; end',
84
- 'some/class_spec.rb'
85
- )
86
- expect(cop.offenses).to be_empty
87
- end
88
-
89
- it 'handles CamelCaps class names' do
90
- inspect_source(
91
- cop,
92
- 'describe MyClass do; end',
93
- 'my_class_spec.rb'
94
- )
95
- expect(cop.offenses).to be_empty
96
- end
97
-
98
- it 'handles ACRONYMClassNames' do
99
- inspect_source(
100
- cop,
101
- 'describe ABCOne::Two do; end',
102
- 'abc_one/two_spec.rb'
103
- )
104
- expect(cop.offenses).to be_empty
105
- end
106
-
107
- it 'handles ALLCAPS class names' do
108
- inspect_source(
109
- cop,
110
- 'describe ALLCAPS do; end',
111
- 'allcaps_spec.rb'
112
- )
113
- expect(cop.offenses).to be_empty
114
- end
115
-
116
- it 'handles alphanumeric class names' do
117
- inspect_source(
118
- cop,
119
- 'describe IPv4AndIPv6 do; end',
120
- 'i_pv4_and_i_pv6_spec.rb'
121
- )
122
- expect(cop.offenses).to be_empty
123
- end
124
-
125
- it 'checks instance methods' do
126
- inspect_source(
127
- cop,
128
- "describe Some::Class, '#inst' do; end",
129
- 'some/class/inst_spec.rb'
130
- )
131
- expect(cop.offenses).to be_empty
132
- end
133
-
134
- it 'checks class methods' do
135
- inspect_source(
136
- cop,
137
- "describe Some::Class, '.inst' do; end",
138
- 'some/class/inst_spec.rb'
139
- )
140
- expect(cop.offenses).to be_empty
141
- end
142
-
143
- it 'allows flat hierarchies for instance methods' do
144
- inspect_source(
145
- cop,
146
- "describe Some::Class, '#inst' do; end",
147
- 'some/class_inst_spec.rb'
148
- )
149
- expect(cop.offenses).to be_empty
150
- end
151
-
152
- it 'allows flat hierarchies for class methods' do
153
- inspect_source(
154
- cop,
155
- "describe Some::Class, '.inst' do; end",
156
- 'some/class_inst_spec.rb'
157
- )
158
- expect(cop.offenses).to be_empty
159
- end
160
-
161
- it 'allows subdirs for instance methods' do
162
- inspect_source(
163
- cop,
164
- "describe Some::Class, '#inst' do; end",
165
- 'some/class/instance_methods/inst_spec.rb'
166
- )
167
- expect(cop.offenses).to be_empty
168
- end
169
-
170
- it 'allows subdirs for class methods' do
171
- inspect_source(
172
- cop,
173
- "describe Some::Class, '.inst' do; end",
174
- 'some/class/class_methods/inst_spec.rb'
175
- )
176
- expect(cop.offenses).to be_empty
177
- end
178
-
179
- it 'ignores non-alphanumeric characters' do
180
- inspect_source(
181
- cop,
182
- "describe Some::Class, '#pred?' do; end",
183
- 'some/class/pred_spec.rb'
184
- )
185
- expect(cop.offenses).to be_empty
186
- end
187
-
188
- it 'allows bang method' do
189
- inspect_source(
190
- cop,
191
- "describe Some::Class, '#bang!' do; end",
192
- 'some/class/bang_spec.rb'
193
- )
194
- expect(cop.offenses).to be_empty
195
- end
196
-
197
- it 'allows flexibility with predicates' do
198
- inspect_source(
199
- cop,
200
- "describe Some::Class, '#thing?' do; end",
201
- 'some/class/thing_predicate_spec.rb'
202
- )
203
- expect(cop.offenses).to be_empty
204
- end
205
-
206
- it 'allows flexibility with operators' do
207
- inspect_source(
208
- cop,
209
- "describe MyLittleClass, '#<=>' do; end",
210
- 'my_little_class/spaceship_operator_spec.rb'
211
- )
212
- expect(cop.offenses).to be_empty
213
- end
214
-
215
- context 'when configured' do
216
- let(:cop_config) { { 'CustomTransform' => { 'FooFoo' => 'foofoo' } } }
217
-
218
- it 'respects custom module name transformation' do
219
- inspect_source(
220
- cop,
221
- "describe FooFoo::Some::Class, '#bar' do; end",
222
- 'foofoo/some/class/bar_spec.rb'
223
- )
224
- expect(cop.offenses).to be_empty
225
- end
226
-
227
- it 'ignores routing specs' do
228
- inspect_source(
229
- cop,
230
- 'describe MyController, "#foo", type: :routing do; end',
231
- 'foofoo/some/class/bar_spec.rb'
232
- )
233
- expect(cop.offenses).to be_empty
234
- end
235
- end
236
- end
@@ -1,130 +0,0 @@
1
- describe RuboCop::Cop::RSpec::Focus do
2
- subject(:cop) { described_class.new }
3
-
4
- # rubocop:disable RSpec/ExampleLength
5
- it 'flags all rspec example blocks with that include `focus: true`' do
6
- expect_violation(<<-RUBY)
7
- example 'test', meta: true, focus: true do; end
8
- ^^^^^^^^^^^ Focused spec found.
9
- xit 'test', meta: true, focus: true do; end
10
- ^^^^^^^^^^^ Focused spec found.
11
- describe 'test', meta: true, focus: true do; end
12
- ^^^^^^^^^^^ Focused spec found.
13
- it 'test', meta: true, focus: true do; end
14
- ^^^^^^^^^^^ Focused spec found.
15
- xspecify 'test', meta: true, focus: true do; end
16
- ^^^^^^^^^^^ Focused spec found.
17
- specify 'test', meta: true, focus: true do; end
18
- ^^^^^^^^^^^ Focused spec found.
19
- example_group 'test', meta: true, focus: true do; end
20
- ^^^^^^^^^^^ Focused spec found.
21
- scenario 'test', meta: true, focus: true do; end
22
- ^^^^^^^^^^^ Focused spec found.
23
- xexample 'test', meta: true, focus: true do; end
24
- ^^^^^^^^^^^ Focused spec found.
25
- xdescribe 'test', meta: true, focus: true do; end
26
- ^^^^^^^^^^^ Focused spec found.
27
- context 'test', meta: true, focus: true do; end
28
- ^^^^^^^^^^^ Focused spec found.
29
- xcontext 'test', meta: true, focus: true do; end
30
- ^^^^^^^^^^^ Focused spec found.
31
- feature 'test', meta: true, focus: true do; end
32
- ^^^^^^^^^^^ Focused spec found.
33
- xfeature 'test', meta: true, focus: true do; end
34
- ^^^^^^^^^^^ Focused spec found.
35
- xscenario 'test', meta: true, focus: true do; end
36
- ^^^^^^^^^^^ Focused spec found.
37
- RUBY
38
- end
39
-
40
- it 'flags all rspec example blocks that include `:focus`' do
41
- expect_violation(<<-RUBY)
42
- example_group 'test', :focus do; end
43
- ^^^^^^ Focused spec found.
44
- feature 'test', :focus do; end
45
- ^^^^^^ Focused spec found.
46
- xexample 'test', :focus do; end
47
- ^^^^^^ Focused spec found.
48
- xdescribe 'test', :focus do; end
49
- ^^^^^^ Focused spec found.
50
- xscenario 'test', :focus do; end
51
- ^^^^^^ Focused spec found.
52
- specify 'test', :focus do; end
53
- ^^^^^^ Focused spec found.
54
- example 'test', :focus do; end
55
- ^^^^^^ Focused spec found.
56
- xfeature 'test', :focus do; end
57
- ^^^^^^ Focused spec found.
58
- xspecify 'test', :focus do; end
59
- ^^^^^^ Focused spec found.
60
- scenario 'test', :focus do; end
61
- ^^^^^^ Focused spec found.
62
- describe 'test', :focus do; end
63
- ^^^^^^ Focused spec found.
64
- xit 'test', :focus do; end
65
- ^^^^^^ Focused spec found.
66
- context 'test', :focus do; end
67
- ^^^^^^ Focused spec found.
68
- xcontext 'test', :focus do; end
69
- ^^^^^^ Focused spec found.
70
- it 'test', :focus do; end
71
- ^^^^^^ Focused spec found.
72
- RUBY
73
- end
74
-
75
- it 'does not flag unfocused specs' do
76
- expect_no_violations(<<-RUBY)
77
- xcontext 'test' do; end
78
- xscenario 'test' do; end
79
- xspecify 'test' do; end
80
- describe 'test' do; end
81
- example 'test' do; end
82
- xexample 'test' do; end
83
- scenario 'test' do; end
84
- specify 'test' do; end
85
- xit 'test' do; end
86
- feature 'test' do; end
87
- xfeature 'test' do; end
88
- context 'test' do; end
89
- it 'test' do; end
90
- example_group 'test' do; end
91
- xdescribe 'test' do; end
92
- RUBY
93
- end
94
-
95
- it 'does not flag a method that is focused twice' do
96
- expect_violation(<<-RUBY)
97
- fit "foo", :focus do
98
- ^^^^^^^^^^^^^^^^^ Focused spec found.
99
- end
100
- RUBY
101
- end
102
-
103
- it 'ignores non-rspec code with :focus blocks' do
104
- expect_no_violations(<<-RUBY)
105
- some_method "foo", focus: true do
106
- end
107
- RUBY
108
- end
109
-
110
- it 'flags focused block types' do
111
- expect_violation(<<-RUBY)
112
- fdescribe 'test' do; end
113
- ^^^^^^^^^^^^^^^^ Focused spec found.
114
- ffeature 'test' do; end
115
- ^^^^^^^^^^^^^^^ Focused spec found.
116
- fcontext 'test' do; end
117
- ^^^^^^^^^^^^^^^ Focused spec found.
118
- fit 'test' do; end
119
- ^^^^^^^^^^ Focused spec found.
120
- fscenario 'test' do; end
121
- ^^^^^^^^^^^^^^^^ Focused spec found.
122
- fexample 'test' do; end
123
- ^^^^^^^^^^^^^^^ Focused spec found.
124
- fspecify 'test' do; end
125
- ^^^^^^^^^^^^^^^ Focused spec found.
126
- focus 'test' do; end
127
- ^^^^^^^^^^^^ Focused spec found.
128
- RUBY
129
- end
130
- end
@@ -1,189 +0,0 @@
1
- # encoding: utf-8
2
-
3
- describe RuboCop::Cop::RSpec::HookArgument, :config do
4
- subject(:cop) { described_class.new(config) }
5
-
6
- let(:cop_config) do
7
- { 'EnforcedStyle' => enforced_style }
8
- end
9
-
10
- let(:enforced_style) { :implicit }
11
-
12
- shared_examples 'ignored hooks' do
13
- it 'ignores :context and :suite' do
14
- expect_no_violations(<<-RUBY)
15
- before(:suite) { true }
16
- after(:suite) { true }
17
- before(:context) { true }
18
- after(:context) { true }
19
- RUBY
20
- end
21
-
22
- it 'ignores hooks with more than one argument' do
23
- expect_no_violations(<<-RUBY)
24
- before(:each, :something_custom) { true }
25
- RUBY
26
- end
27
-
28
- it 'ignores non-rspec hooks' do
29
- expect_no_violations(<<-RUBY)
30
- setup(:each) { true }
31
- RUBY
32
- end
33
- end
34
-
35
- shared_examples 'generated config' do |source, detected_style|
36
- it 'generates a todo based on the detected style' do
37
- inspect_source(cop, source, 'foo_spec.rb')
38
-
39
- expect(cop.config_to_allow_offenses)
40
- .to eq('EnforcedStyle' => detected_style)
41
- end
42
- end
43
-
44
- shared_examples 'hook autocorrect' do |output|
45
- it 'autocorrects :each to EnforcedStyle' do
46
- corrected =
47
- autocorrect_source(cop, 'before(:each) { }', 'spec/foo_spec.rb')
48
-
49
- expect(corrected).to eql(output)
50
- end
51
-
52
- it 'autocorrects :example to EnforcedStyle' do
53
- corrected =
54
- autocorrect_source(cop, 'before(:example) { }', 'spec/foo_spec.rb')
55
-
56
- expect(corrected).to eql(output)
57
- end
58
-
59
- it 'autocorrects :implicit to EnforcedStyle' do
60
- corrected =
61
- autocorrect_source(cop, 'before { }', 'spec/foo_spec.rb')
62
-
63
- expect(corrected).to eql(output)
64
- end
65
- end
66
-
67
- shared_examples 'an example hook' do
68
- include_examples 'ignored hooks'
69
- include_examples 'generated config', 'before(:each) { foo }', 'each'
70
- include_examples 'generated config', 'before(:example) { foo }', 'example'
71
- include_examples 'generated config', 'before { foo }', 'implicit'
72
- end
73
-
74
- context 'when EnforcedStyle is :implicit' do
75
- let(:enforced_style) { :implicit }
76
-
77
- it 'detects :each for hooks' do
78
- expect_violation(<<-RUBY)
79
- before(:each) { true }
80
- ^^^^^^^^^^^^^ Omit the default `:each` argument for RSpec hooks.
81
- after(:each) { true }
82
- ^^^^^^^^^^^^ Omit the default `:each` argument for RSpec hooks.
83
- around(:each) { true }
84
- ^^^^^^^^^^^^^ Omit the default `:each` argument for RSpec hooks.
85
- RUBY
86
- end
87
-
88
- it 'detects :example for hooks' do
89
- expect_violation(<<-RUBY)
90
- before(:example) { true }
91
- ^^^^^^^^^^^^^^^^ Omit the default `:example` argument for RSpec hooks.
92
- after(:example) { true }
93
- ^^^^^^^^^^^^^^^ Omit the default `:example` argument for RSpec hooks.
94
- around(:example) { true }
95
- ^^^^^^^^^^^^^^^^ Omit the default `:example` argument for RSpec hooks.
96
- RUBY
97
- end
98
-
99
- it 'does not flag hooks without default scopes' do
100
- expect_no_violations(<<-RUBY)
101
- before { true }
102
- after { true }
103
- before { true }
104
- after { true }
105
- RUBY
106
- end
107
-
108
- include_examples 'an example hook'
109
- include_examples 'hook autocorrect', 'before { }'
110
- end
111
-
112
- context 'when EnforcedStyle is :each' do
113
- let(:enforced_style) { :each }
114
-
115
- it 'detects :each for hooks' do
116
- expect_no_violations(<<-RUBY)
117
- before(:each) { true }
118
- after(:each) { true }
119
- around(:each) { true }
120
- RUBY
121
- end
122
-
123
- it 'detects :example for hooks' do
124
- expect_violation(<<-RUBY)
125
- before(:example) { true }
126
- ^^^^^^^^^^^^^^^^ Use `:each` for RSpec hooks.
127
- after(:example) { true }
128
- ^^^^^^^^^^^^^^^ Use `:each` for RSpec hooks.
129
- around(:example) { true }
130
- ^^^^^^^^^^^^^^^^ Use `:each` for RSpec hooks.
131
- RUBY
132
- end
133
-
134
- it 'does not flag hooks without default scopes' do
135
- expect_violation(<<-RUBY)
136
- before { true }
137
- ^^^^^^ Use `:each` for RSpec hooks.
138
- after { true }
139
- ^^^^^ Use `:each` for RSpec hooks.
140
- before { true }
141
- ^^^^^^ Use `:each` for RSpec hooks.
142
- after { true }
143
- ^^^^^ Use `:each` for RSpec hooks.
144
- RUBY
145
- end
146
-
147
- include_examples 'an example hook'
148
- include_examples 'hook autocorrect', 'before(:each) { }'
149
- end
150
-
151
- context 'when EnforcedStyle is :example' do
152
- let(:enforced_style) { :example }
153
-
154
- it 'detects :example for hooks' do
155
- expect_no_violations(<<-RUBY)
156
- before(:example) { true }
157
- after(:example) { true }
158
- around(:example) { true }
159
- RUBY
160
- end
161
-
162
- it 'detects :each for hooks' do
163
- expect_violation(<<-RUBY)
164
- before(:each) { true }
165
- ^^^^^^^^^^^^^ Use `:example` for RSpec hooks.
166
- after(:each) { true }
167
- ^^^^^^^^^^^^ Use `:example` for RSpec hooks.
168
- around(:each) { true }
169
- ^^^^^^^^^^^^^ Use `:example` for RSpec hooks.
170
- RUBY
171
- end
172
-
173
- it 'does not flag hooks without default scopes' do
174
- expect_violation(<<-RUBY)
175
- before { true }
176
- ^^^^^^ Use `:example` for RSpec hooks.
177
- after { true }
178
- ^^^^^ Use `:example` for RSpec hooks.
179
- before { true }
180
- ^^^^^^ Use `:example` for RSpec hooks.
181
- after { true }
182
- ^^^^^ Use `:example` for RSpec hooks.
183
- RUBY
184
- end
185
-
186
- include_examples 'an example hook'
187
- include_examples 'hook autocorrect', 'before(:example) { }'
188
- end
189
- end
@@ -1,75 +0,0 @@
1
- describe RuboCop::Cop::RSpec::InstanceVariable do
2
- subject(:cop) { described_class.new }
3
-
4
- it 'finds an instance variable inside a describe' do
5
- expect_violation(<<-RUBY)
6
- describe MyClass do
7
- before { @foo = [] }
8
- it { expect(@foo).to be_empty }
9
- ^^^^ Use `let` instead of an instance variable
10
- end
11
- RUBY
12
- end
13
-
14
- it 'ignores non-spec blocks' do
15
- expect_no_violations(<<-RUBY)
16
- not_rspec do
17
- before { @foo = [] }
18
- it { expect(@foo).to be_empty }
19
- end
20
- RUBY
21
- end
22
-
23
- it 'finds an instance variable inside a shared example' do
24
- expect_violation(<<-RUBY)
25
- shared_examples 'shared example' do
26
- it { expect(@foo).to be_empty }
27
- ^^^^ Use `let` instead of an instance variable
28
- end
29
- RUBY
30
- end
31
-
32
- it 'ignores an instance variable without describe' do
33
- expect_no_violations(<<-RUBY)
34
- @foo = []
35
- @foo.empty?
36
- RUBY
37
- end
38
-
39
- # Regression test for nevir/rubocop-rspec#115
40
- it 'ignores instance variables outside of specs' do
41
- expect_no_violations(<<-RUBY, filename: 'lib/source_code.rb')
42
- feature do
43
- @foo = bar
44
-
45
- @foo
46
- end
47
- RUBY
48
- end
49
-
50
- context 'when configured with AssignmentOnly', :config do
51
- subject(:cop) { described_class.new(config) }
52
-
53
- let(:cop_config) do
54
- { 'AssignmentOnly' => true }
55
- end
56
-
57
- it 'flags an instance variable when it is also assigned' do
58
- expect_violation(<<-RUBY)
59
- describe MyClass do
60
- before { @foo = [] }
61
- it { expect(@foo).to be_empty }
62
- ^^^^ Use `let` instead of an instance variable
63
- end
64
- RUBY
65
- end
66
-
67
- it 'ignores an instance variable when it is not assigned' do
68
- expect_no_violations(<<-RUBY)
69
- describe MyClass do
70
- it { expect(@foo).to be_empty }
71
- end
72
- RUBY
73
- end
74
- end
75
- end
@@ -1,54 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- RSpec.describe RuboCop::Cop::RSpec::LeadingSubject do
4
- subject(:cop) { described_class.new }
5
-
6
- it 'checks subject below let' do
7
- expect_violation(<<-RUBY)
8
- RSpec.describe User do
9
- let(:params) { foo }
10
-
11
- subject { described_class.new }
12
- ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ Declare `subject` above any other `let` declarations
13
- end
14
- RUBY
15
- end
16
-
17
- it 'approves of subject above let' do
18
- expect_no_violations(<<-RUBY)
19
- RSpec.describe User do
20
- context 'blah' do
21
- end
22
-
23
- subject { described_class.new }
24
-
25
- let(:params) { foo }
26
- end
27
- RUBY
28
- end
29
-
30
- it 'handles subjects in contexts' do
31
- expect_no_violations(<<-RUBY)
32
- RSpec.describe User do
33
- let(:params) { foo }
34
-
35
- context "when something happens" do
36
- subject { described_class.new }
37
- end
38
- end
39
- RUBY
40
- end
41
-
42
- it 'handles subjects in tests' do
43
- expect_no_violations(<<-RUBY)
44
- RSpec.describe User do
45
- # This shouldn't really ever happen in a sane codebase but I still
46
- # want to avoid false positives
47
- it "doesn't mind me calling a method called subject in the test" do
48
- let(foo)
49
- subject { bar }
50
- end
51
- end
52
- RUBY
53
- end
54
- end