cuke_linter 0.9.0 → 0.10.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 (55) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +17 -1
  3. data/CONTRIBUTING.md +26 -0
  4. data/README.md +2 -15
  5. data/lib/cuke_linter.rb +36 -18
  6. data/lib/cuke_linter/linters/example_without_name_linter.rb +1 -1
  7. data/lib/cuke_linter/linters/feature_with_too_many_different_tags_linter.rb +38 -0
  8. data/lib/cuke_linter/linters/test_should_use_background_linter.rb +28 -0
  9. data/lib/cuke_linter/linters/test_with_action_step_as_final_step_linter.rb +23 -0
  10. data/lib/cuke_linter/linters/test_with_setup_step_after_action_step_linter.rb +31 -0
  11. data/lib/cuke_linter/linters/test_with_setup_step_after_verification_step_linter.rb +31 -0
  12. data/lib/cuke_linter/linters/test_with_setup_step_as_final_step_linter.rb +23 -0
  13. data/lib/cuke_linter/version.rb +1 -1
  14. data/testing/cucumber/features/default_linters.feature +20 -14
  15. data/testing/cucumber/features/linters/example_without_name.feature +8 -6
  16. data/testing/cucumber/features/linters/feature_with_too_many_different_tags.feature +56 -0
  17. data/testing/cucumber/features/linters/step_with_end_period.feature +1 -1
  18. data/testing/cucumber/features/linters/test_should_use_background.feature +29 -0
  19. data/testing/cucumber/features/linters/test_with_action_as_final_step.feature +28 -0
  20. data/testing/cucumber/features/linters/test_with_setup_step_after_action_step.feature +30 -0
  21. data/testing/cucumber/features/linters/test_with_setup_step_after_verification_step.feature +30 -0
  22. data/testing/cucumber/features/linters/test_with_setup_step_as_final_step.feature +28 -0
  23. data/testing/cucumber/features/linters/test_with_too_many_steps.feature +5 -0
  24. data/testing/cucumber/step_definitions/setup_steps.rb +28 -0
  25. data/testing/model_factory.rb +1 -1
  26. data/testing/rspec/spec/integration/cuke_linter_integration_spec.rb +12 -0
  27. data/testing/rspec/spec/integration/linters/feature_with_too_many_different_tags_linter_integration_spec.rb +8 -0
  28. data/testing/rspec/spec/integration/linters/test_should_use_background_linter_integration_spec.rb +8 -0
  29. data/testing/rspec/spec/integration/linters/test_with_action_step_as_final_step_linter_integration_spec.rb +8 -0
  30. data/testing/rspec/spec/integration/linters/test_with_setup_step_after_action_step_linter_integration_spec.rb +8 -0
  31. data/testing/rspec/spec/integration/linters/test_with_setup_step_after_verification_step_linter_integration_spec.rb +8 -0
  32. data/testing/rspec/spec/integration/linters/test_with_setup_step_as_final_step_linter_integration_spec.rb +8 -0
  33. data/testing/rspec/spec/unit/linters/background_does_more_than_setup_linter_unit_spec.rb +20 -57
  34. data/testing/rspec/spec/unit/linters/element_with_too_many_tags_linter_unit_spec.rb +18 -52
  35. data/testing/rspec/spec/unit/linters/example_without_name_linter_unit_spec.rb +41 -43
  36. data/testing/rspec/spec/unit/linters/feature_with_too_many_different_tags_linter_unit_spec.rb +293 -0
  37. data/testing/rspec/spec/unit/linters/feature_without_description_linter_unit_spec.rb +25 -42
  38. data/testing/rspec/spec/unit/linters/feature_without_name_linter_unit_spec.rb +10 -38
  39. data/testing/rspec/spec/unit/linters/feature_without_scenarios_linter_unit_spec.rb +32 -52
  40. data/testing/rspec/spec/unit/linters/linter_unit_spec.rb +27 -10
  41. data/testing/rspec/spec/unit/linters/linter_unit_specs.rb +26 -12
  42. data/testing/rspec/spec/unit/linters/outline_with_single_example_row_linter_unit_spec.rb +19 -66
  43. data/testing/rspec/spec/unit/linters/single_test_background_linter_unit_spec.rb +12 -39
  44. data/testing/rspec/spec/unit/linters/step_with_end_period_linter_unit_spec.rb +9 -28
  45. data/testing/rspec/spec/unit/linters/step_with_too_many_characters_linter_unit_spec.rb +19 -45
  46. data/testing/rspec/spec/unit/linters/test_should_use_background_linter_unit_spec.rb +226 -0
  47. data/testing/rspec/spec/unit/linters/test_with_action_step_as_final_step_linter_unit_spec.rb +98 -0
  48. data/testing/rspec/spec/unit/linters/test_with_no_action_step_linter_unit_spec.rb +10 -51
  49. data/testing/rspec/spec/unit/linters/test_with_no_name_linter_unit_spec.rb +11 -38
  50. data/testing/rspec/spec/unit/linters/test_with_no_verification_step_linter_unit_spec.rb +16 -54
  51. data/testing/rspec/spec/unit/linters/test_with_setup_step_after_action_step_linter_unit_spec.rb +124 -0
  52. data/testing/rspec/spec/unit/linters/test_with_setup_step_after_verification_step_linter_unit_spec.rb +125 -0
  53. data/testing/rspec/spec/unit/linters/test_with_setup_step_as_final_step_linter_unit_spec.rb +98 -0
  54. data/testing/rspec/spec/unit/linters/test_with_too_many_steps_linter_unit_spec.rb +9 -49
  55. metadata +27 -2
@@ -0,0 +1,56 @@
1
+ Feature: Feature with too many different tags linter
2
+
3
+ As a writer of documentation
4
+ I want features to not contain too many different tags
5
+ So that readers do not need to know too many different contexts
6
+
7
+
8
+ Scenario: Linting
9
+ Given a linter for features with too many different tags
10
+ And the following feature:
11
+ """
12
+ # Total tag count doesn't matter. The count of unique tags is what matters.
13
+ @tag_A @tag_A @tag_A @tag_A
14
+ Feature:
15
+
16
+ @tag_B @tag_C
17
+ Scenario:
18
+ * a step
19
+
20
+ @tag_D @tag_E @tag_F @tag_G
21
+ Scenario:
22
+ * a step
23
+
24
+ @tag_H @tag_I @tag_J
25
+ Scenario:
26
+ * a step
27
+
28
+ @K
29
+ Scenario:
30
+ * a step
31
+ """
32
+ When it is linted
33
+ Then an error is reported:
34
+ | linter | problem | location |
35
+ | FeatureWithTooManyDifferentTagsLinter | Feature contains too many different tags. 11 tags found (max 10). | <path_to_file>:3 |
36
+
37
+ Scenario: Configuration of tag count threshold
38
+ Given a linter for features with too many different tags has been registered
39
+ And the following configuration file:
40
+ """
41
+ FeatureWithTooManyDifferentTagsLinter:
42
+ TagCountThreshold: 2
43
+ """
44
+ And the following feature:
45
+ """
46
+ @tag_A @tag_B @tag_C
47
+ Feature:
48
+
49
+ Scenario:
50
+ * a step
51
+ """
52
+ When the configuration file is loaded
53
+ And it is linted
54
+ Then an error is reported:
55
+ | linter | problem | location |
56
+ | FeatureWithTooManyDifferentTagsLinter | Feature contains too many different tags. 3 tags found (max 2). | <path_to_file>:2 |
@@ -2,7 +2,7 @@ Feature: Step that ends with a period linter
2
2
 
3
3
  As a writer of documentation
4
4
  I want to avoid periods at the end of steps
5
- So that readability is not impacted when they are used elsewhere
5
+ So that readability is not impacted when the steps are used in other contexts
6
6
 
7
7
 
8
8
  Scenario: Linting
@@ -0,0 +1,29 @@
1
+ Feature: Test should use background linter
2
+
3
+ As a writer of documentation
4
+ I want to know if I am including the same steps in every use case
5
+ So that I can use a background to make it clear that a common context exists
6
+
7
+
8
+ Scenario: Linting
9
+
10
+ Note: Also works on outlines.
11
+
12
+ Given a linter for tests that should use a background
13
+ And the following feature:
14
+ """
15
+ Feature:
16
+
17
+ Scenario:
18
+ * a common step
19
+ * a different step
20
+
21
+ Scenario:
22
+ * a common step
23
+ * a more different step
24
+ """
25
+ When it is linted
26
+ Then an error is reported:
27
+ | linter | problem | location |
28
+ | TestShouldUseBackgroundLinter | Test shares steps with all other tests in feature. Use a background. | <path_to_file>:3 |
29
+ | TestShouldUseBackgroundLinter | Test shares steps with all other tests in feature. Use a background. | <path_to_file>:7 |
@@ -0,0 +1,28 @@
1
+ Feature: Test with action step as final step linter
2
+
3
+ As a tester
4
+ I want to be warned about abnormal step flows
5
+ So that the tests make sense
6
+
7
+
8
+ Scenario: Linting
9
+
10
+ Note: Also works on outlines.
11
+
12
+ Given a linter for tests with an action step as the final step
13
+ And the following feature:
14
+ """
15
+ Feature:
16
+
17
+ Scenario: Action as final step
18
+ When the last step
19
+ """
20
+ When it is linted
21
+ Then an error is reported:
22
+ | linter | problem | location |
23
+ | TestWithActionStepAsFinalStepLinter | Test has 'When' as the final step. | <path_to_file>:3 |
24
+
25
+ @wip
26
+ Scenario: Configuration
27
+
28
+ Configure the keyword(s) that count as action steps?
@@ -0,0 +1,30 @@
1
+ Feature: Test with setup step after action step linter
2
+
3
+ As a tester
4
+ I want to be warned about abnormal step flows
5
+ So that the tests make sense
6
+
7
+
8
+ Scenario: Linting
9
+
10
+ Note: Also works on outlines. Does not include steps inherited from backgrounds.
11
+
12
+ Given a linter for tests with a setup step after an action step
13
+ And the following feature:
14
+ """
15
+ Feature:
16
+
17
+ Scenario:
18
+ When action step
19
+ Given an out of place setup step
20
+ """
21
+ When it is linted
22
+ Then an error is reported:
23
+ | linter | problem | location |
24
+ | TestWithSetupStepAfterActionStepLinter | Test has 'Given' step after 'When' step. | <path_to_file>:3 |
25
+
26
+ @wip
27
+ Scenario: Configuration
28
+
29
+ Configure the keyword(s) that count as setup/action/verification steps?
30
+ Configure whether or not to include background steps?
@@ -0,0 +1,30 @@
1
+ Feature: Test with setup step after verification step linter
2
+
3
+ As a tester
4
+ I want to be warned about abnormal step flows
5
+ So that the tests make sense
6
+
7
+
8
+ Scenario: Linting
9
+
10
+ Note: Also works on outlines. Does not include steps inherited from backgrounds.
11
+
12
+ Given a linter for tests with a setup step after a verification step
13
+ And the following feature:
14
+ """
15
+ Feature:
16
+
17
+ Scenario:
18
+ Then verification step
19
+ Given an out of place setup step
20
+ """
21
+ When it is linted
22
+ Then an error is reported:
23
+ | linter | problem | location |
24
+ | TestWithSetupStepAfterVerificationStepLinter | Test has 'Given' step after 'Then' step. | <path_to_file>:3 |
25
+
26
+ @wip
27
+ Scenario: Configuration
28
+
29
+ Configure the keyword(s) that count as verification steps?
30
+ Configure whether or not to include background steps?
@@ -0,0 +1,28 @@
1
+ Feature: Test with setup step as final step linter
2
+
3
+ As a tester
4
+ I want to be warned about abnormal step flows
5
+ So that the tests make sense
6
+
7
+
8
+ Scenario: Linting
9
+
10
+ Note: Also works on outlines.
11
+
12
+ Given a linter for tests with a setup step as the final step
13
+ And the following feature:
14
+ """
15
+ Feature:
16
+
17
+ Scenario:
18
+ Given the last step
19
+ """
20
+ When it is linted
21
+ Then an error is reported:
22
+ | linter | problem | location |
23
+ | TestWithSetupStepAsFinalStepLinter | Test has 'Given' as the final step. | <path_to_file>:3 |
24
+
25
+ @wip
26
+ Scenario: Configuration
27
+
28
+ Configure the keyword(s) that count as setup steps?
@@ -54,3 +54,8 @@ Feature: Test with too many steps linter
54
54
  Then an error is reported:
55
55
  | linter | problem | location |
56
56
  | TestWithTooManyStepsLinter | Test has too many steps. 4 steps found (max 3). | <path_to_file>:3 |
57
+
58
+ @wip
59
+ Scenario: Configuration
60
+
61
+ Ideas: Configure whether or not the linter includes steps from backgrounds
@@ -73,6 +73,10 @@ Given(/^a linter for elements with too many tags$/) do
73
73
  @linter = CukeLinter::ElementWithTooManyTagsLinter.new
74
74
  end
75
75
 
76
+ Given(/^a linter for features with too many different tags$/) do
77
+ @linter = CukeLinter::FeatureWithTooManyDifferentTagsLinter.new
78
+ end
79
+
76
80
  Given(/^a linter for elements with too many tags has been registered$/) do
77
81
  CukeLinter.register_linter(linter: CukeLinter::ElementWithTooManyTagsLinter.new, name: 'ElementWithTooManyTagsLinter')
78
82
  end
@@ -89,10 +93,34 @@ Given(/^a linter for tests with no name$/) do
89
93
  @linter = CukeLinter::TestWithNoNameLinter.new
90
94
  end
91
95
 
96
+ Given(/^a linter for tests that should use a background$/) do
97
+ @linter = CukeLinter::TestShouldUseBackgroundLinter.new
98
+ end
99
+
100
+ Given(/^a linter for tests with a setup step after an action step$/) do
101
+ @linter = CukeLinter::TestWithSetupStepAfterActionStepLinter.new
102
+ end
103
+
104
+ Given(/^a linter for tests with a setup step after a verification step$/) do
105
+ @linter = CukeLinter::TestWithSetupStepAfterVerificationStepLinter.new
106
+ end
107
+
108
+ Given(/^a linter for tests with a setup step as the final step$/) do
109
+ @linter = CukeLinter::TestWithSetupStepAsFinalStepLinter.new
110
+ end
111
+
112
+ Given(/^a linter for tests with an action step as the final step$/) do
113
+ @linter = CukeLinter::TestWithActionStepAsFinalStepLinter.new
114
+ end
115
+
92
116
  Given(/^a linter for test steps with too many characters has been registered$/) do
93
117
  CukeLinter.register_linter(linter: CukeLinter::StepWithTooManyCharactersLinter.new, name: 'StepWithTooManyCharactersLinter')
94
118
  end
95
119
 
120
+ Given(/^a linter for features with too many different tags has been registered$/) do
121
+ CukeLinter.register_linter(linter: CukeLinter::FeatureWithTooManyDifferentTagsLinter.new, name: 'FeatureWithTooManyDifferentTagsLinter')
122
+ end
123
+
96
124
  Given(/^the following configuration file(?: "([^"]*)")?:$/) do |file_name, text|
97
125
  file_name ||= '.cuke_linter'
98
126
 
@@ -72,7 +72,7 @@ module CukeLinter
72
72
  model
73
73
  end
74
74
 
75
- def self.generate_lintable_model(parent_file_path: 'path_to_file', source_line: '1', children: [])
75
+ def self.generate_lintable_model(parent_file_path: 'path_to_file', source_line: 1, children: [])
76
76
  fake_file_model = CukeModeler::FeatureFile.new
77
77
  fake_file_model.path = parent_file_path
78
78
 
@@ -180,6 +180,8 @@ RSpec.describe CukeLinter do
180
180
  expect(subject.registered_linters['ElementWithTooManyTagsLinter']).to be_a(CukeLinter::ElementWithTooManyTagsLinter)
181
181
  expect(subject.registered_linters.keys).to include('ExampleWithoutNameLinter')
182
182
  expect(subject.registered_linters['ExampleWithoutNameLinter']).to be_a(CukeLinter::ExampleWithoutNameLinter)
183
+ expect(subject.registered_linters.keys).to include('FeatureWithTooManyDifferentTagsLinter')
184
+ expect(subject.registered_linters['FeatureWithTooManyDifferentTagsLinter']).to be_a(CukeLinter::FeatureWithTooManyDifferentTagsLinter)
183
185
  expect(subject.registered_linters.keys).to include('FeatureWithoutDescriptionLinter')
184
186
  expect(subject.registered_linters['FeatureWithoutDescriptionLinter']).to be_a(CukeLinter::FeatureWithoutDescriptionLinter)
185
187
  expect(subject.registered_linters.keys).to include('FeatureWithoutNameLinter')
@@ -194,12 +196,22 @@ RSpec.describe CukeLinter do
194
196
  expect(subject.registered_linters['StepWithEndPeriodLinter']).to be_a(CukeLinter::StepWithEndPeriodLinter)
195
197
  expect(subject.registered_linters.keys).to include('StepWithTooManyCharactersLinter')
196
198
  expect(subject.registered_linters['StepWithTooManyCharactersLinter']).to be_a(CukeLinter::StepWithTooManyCharactersLinter)
199
+ expect(subject.registered_linters.keys).to include('TestShouldUseBackgroundLinter')
200
+ expect(subject.registered_linters['TestShouldUseBackgroundLinter']).to be_a(CukeLinter::TestShouldUseBackgroundLinter)
201
+ expect(subject.registered_linters.keys).to include('TestWithActionStepAsFinalStepLinter')
202
+ expect(subject.registered_linters['TestWithActionStepAsFinalStepLinter']).to be_a(CukeLinter::TestWithActionStepAsFinalStepLinter)
197
203
  expect(subject.registered_linters.keys).to include('TestWithNoActionStepLinter')
198
204
  expect(subject.registered_linters['TestWithNoActionStepLinter']).to be_a(CukeLinter::TestWithNoActionStepLinter)
199
205
  expect(subject.registered_linters.keys).to include('TestWithNoNameLinter')
200
206
  expect(subject.registered_linters['TestWithNoNameLinter']).to be_a(CukeLinter::TestWithNoNameLinter)
201
207
  expect(subject.registered_linters.keys).to include('TestWithNoVerificationStepLinter')
202
208
  expect(subject.registered_linters['TestWithNoVerificationStepLinter']).to be_a(CukeLinter::TestWithNoVerificationStepLinter)
209
+ expect(subject.registered_linters.keys).to include('TestWithSetupStepAfterActionStepLinter')
210
+ expect(subject.registered_linters['TestWithSetupStepAfterActionStepLinter']).to be_a(CukeLinter::TestWithSetupStepAfterActionStepLinter)
211
+ expect(subject.registered_linters.keys).to include('TestWithSetupStepAfterVerificationStepLinter')
212
+ expect(subject.registered_linters['TestWithSetupStepAfterVerificationStepLinter']).to be_a(CukeLinter::TestWithSetupStepAfterVerificationStepLinter)
213
+ expect(subject.registered_linters.keys).to include('TestWithSetupStepAsFinalStepLinter')
214
+ expect(subject.registered_linters['TestWithSetupStepAsFinalStepLinter']).to be_a(CukeLinter::TestWithSetupStepAsFinalStepLinter)
203
215
  expect(subject.registered_linters.keys).to include('TestWithTooManyStepsLinter')
204
216
  expect(subject.registered_linters['TestWithTooManyStepsLinter']).to be_a(CukeLinter::TestWithTooManyStepsLinter)
205
217
  end
@@ -0,0 +1,8 @@
1
+ require_relative '../../../../../environments/rspec_env'
2
+
3
+
4
+ RSpec.describe CukeLinter::FeatureWithTooManyDifferentTagsLinter do
5
+
6
+ it_should_behave_like 'a linter at the integration level'
7
+
8
+ end
@@ -0,0 +1,8 @@
1
+ require_relative '../../../../../environments/rspec_env'
2
+
3
+
4
+ RSpec.describe CukeLinter::TestShouldUseBackgroundLinter do
5
+
6
+ it_should_behave_like 'a linter at the integration level'
7
+
8
+ end
@@ -0,0 +1,8 @@
1
+ require_relative '../../../../../environments/rspec_env'
2
+
3
+
4
+ RSpec.describe CukeLinter::TestWithActionStepAsFinalStepLinter do
5
+
6
+ it_should_behave_like 'a linter at the integration level'
7
+
8
+ end
@@ -0,0 +1,8 @@
1
+ require_relative '../../../../../environments/rspec_env'
2
+
3
+
4
+ RSpec.describe CukeLinter::TestWithSetupStepAfterActionStepLinter do
5
+
6
+ it_should_behave_like 'a linter at the integration level'
7
+
8
+ end
@@ -0,0 +1,8 @@
1
+ require_relative '../../../../../environments/rspec_env'
2
+
3
+
4
+ RSpec.describe CukeLinter::TestWithSetupStepAfterVerificationStepLinter do
5
+
6
+ it_should_behave_like 'a linter at the integration level'
7
+
8
+ end
@@ -0,0 +1,8 @@
1
+ require_relative '../../../../../environments/rspec_env'
2
+
3
+
4
+ RSpec.describe CukeLinter::TestWithSetupStepAsFinalStepLinter do
5
+
6
+ it_should_behave_like 'a linter at the integration level'
7
+
8
+ end
@@ -3,16 +3,7 @@ require_relative '../../../../../environments/rspec_env'
3
3
 
4
4
  RSpec.describe CukeLinter::BackgroundDoesMoreThanSetupLinter do
5
5
 
6
- let(:good_data) do
7
- CukeLinter::ModelFactory.generate_background_model(source_text: 'Background:
8
- Given something')
9
- end
10
-
11
- let(:bad_data) do
12
- CukeLinter::ModelFactory.generate_background_model(source_text: 'Background:
13
- When something')
14
- end
15
-
6
+ let(:model_file_path) { 'some_file_path' }
16
7
 
17
8
  it_should_behave_like 'a linter at the unit level'
18
9
 
@@ -26,88 +17,60 @@ RSpec.describe CukeLinter::BackgroundDoesMoreThanSetupLinter do
26
17
  context 'a background with action steps' do
27
18
 
28
19
  let(:test_model) do
29
- CukeLinter::ModelFactory.generate_background_model(source_text: 'Background:
30
- When something')
20
+ CukeLinter::ModelFactory.generate_background_model(parent_file_path: model_file_path,
21
+ source_text: 'Background:
22
+ When something')
31
23
  end
32
24
 
25
+ it_should_behave_like 'a linter linting a bad model'
26
+
27
+
33
28
  it 'records a problem' do
34
29
  result = subject.lint(test_model)
35
30
 
36
31
  expect(result[:problem]).to eq('Background has non-setup steps')
37
32
  end
38
33
 
39
- it 'records the location of the problem' do
40
- model = CukeLinter::ModelFactory.generate_background_model(parent_file_path: 'path_to_file',
41
- source_text: 'Background:
42
- When something')
43
-
44
- model.source_line = 1
45
- result = subject.lint(model)
46
- expect(result[:location]).to eq('path_to_file:1')
47
-
48
- model.source_line = 3
49
- result = subject.lint(model)
50
- expect(result[:location]).to eq('path_to_file:3')
51
- end
52
-
53
34
  end
54
35
 
55
36
  context 'a background with verification steps' do
56
37
 
57
38
  let(:test_model) do
58
- CukeLinter::ModelFactory.generate_background_model(source_text: 'Background:
59
- Then something')
39
+ CukeLinter::ModelFactory.generate_background_model(parent_file_path: model_file_path,
40
+ source_text: 'Background:
41
+ Then something')
60
42
  end
61
43
 
44
+ it_should_behave_like 'a linter linting a bad model'
45
+
46
+
62
47
  it 'records a problem' do
63
48
  result = subject.lint(test_model)
64
49
 
65
50
  expect(result[:problem]).to eq('Background has non-setup steps')
66
51
  end
67
52
 
68
- it 'records the location of the problem' do
69
- model = CukeLinter::ModelFactory.generate_background_model(parent_file_path: 'path_to_file',
70
- source_text: 'Background:
71
- Then something')
72
-
73
- model.source_line = 1
74
- result = subject.lint(model)
75
- expect(result[:location]).to eq('path_to_file:1')
76
-
77
- model.source_line = 3
78
- result = subject.lint(model)
79
- expect(result[:location]).to eq('path_to_file:3')
80
- end
81
-
82
53
  end
83
54
 
84
55
  context 'a background with only setup steps' do
85
56
 
86
- context 'with a scenario' do
87
-
88
- let(:test_model) do
89
- gherkin = 'Background:
57
+ let(:test_model) do
58
+ gherkin = 'Background:
90
59
  Given something
91
60
  * (plus something)'
92
61
 
93
- CukeLinter::ModelFactory.generate_background_model(source_text: gherkin)
94
- end
95
-
96
- it 'does not record a problem' do
97
- expect(subject.lint(test_model)).to eq(nil)
98
- end
99
-
62
+ CukeLinter::ModelFactory.generate_background_model(source_text: gherkin)
100
63
  end
101
64
 
65
+ it_should_behave_like 'a linter linting a good model'
66
+
102
67
  end
103
68
 
104
69
  context 'a non-background model' do
105
70
 
106
- it 'returns no result' do
107
- result = subject.lint(CukeModeler::Model.new)
71
+ let(:test_model) { CukeModeler::Model.new }
108
72
 
109
- expect(result).to eq(nil)
110
- end
73
+ it_should_behave_like 'a linter linting a good model'
111
74
 
112
75
  end
113
76
  end