rubocop-rspec 1.15.1 → 1.16.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.
- checksums.yaml +4 -4
- data/CHANGELOG.md +20 -1
- data/Gemfile +0 -1
- data/config/default.yml +105 -0
- data/lib/rubocop-rspec.rb +27 -0
- data/lib/rubocop/cop/rspec/align_left_let_brace.rb +51 -0
- data/lib/rubocop/cop/rspec/align_right_let_brace.rb +51 -0
- data/lib/rubocop/cop/rspec/any_instance.rb +1 -1
- data/lib/rubocop/cop/rspec/cop.rb +4 -2
- data/lib/rubocop/cop/rspec/expect_in_hook.rb +61 -0
- data/lib/rubocop/cop/rspec/factory_girl/dynamic_attribute_defined_statically.rb +84 -0
- data/lib/rubocop/cop/rspec/hook_argument.rb +11 -5
- data/lib/rubocop/cop/rspec/invalid_predicate_matcher.rb +42 -0
- data/lib/rubocop/cop/rspec/let_before_examples.rb +66 -0
- data/lib/rubocop/cop/rspec/multiple_expectations.rb +3 -5
- data/lib/rubocop/cop/rspec/multiple_subjects.rb +80 -0
- data/lib/rubocop/cop/rspec/named_subject.rb +5 -6
- data/lib/rubocop/cop/rspec/overwriting_setup.rb +1 -1
- data/lib/rubocop/cop/rspec/predicate_matcher.rb +337 -0
- data/lib/rubocop/cop/rspec/return_from_stub.rb +83 -0
- data/lib/rubocop/cop/rspec/void_expect.rb +52 -0
- data/lib/rubocop/rspec/align_let_brace.rb +64 -0
- data/lib/rubocop/rspec/config_formatter.rb +7 -4
- data/lib/rubocop/rspec/description_extractor.rb +2 -2
- data/lib/rubocop/rspec/example_group.rb +25 -2
- data/lib/rubocop/rspec/factory_girl.rb +7 -0
- data/lib/rubocop/rspec/language.rb +6 -1
- data/lib/rubocop/rspec/version.rb +1 -1
- data/rubocop-rspec.gemspec +1 -4
- data/spec/project/default_config_spec.rb +8 -4
- data/spec/rubocop/cop/rspec/align_left_let_brace_spec.rb +62 -0
- data/spec/rubocop/cop/rspec/align_right_let_brace_spec.rb +62 -0
- data/spec/rubocop/cop/rspec/any_instance_spec.rb +3 -3
- data/spec/rubocop/cop/rspec/around_block_spec.rb +11 -11
- data/spec/rubocop/cop/rspec/be_eql_spec.rb +7 -7
- data/spec/rubocop/cop/rspec/before_after_all_spec.rb +4 -4
- data/spec/rubocop/cop/rspec/cop_spec.rb +7 -7
- data/spec/rubocop/cop/rspec/describe_class_spec.rb +18 -18
- data/spec/rubocop/cop/rspec/describe_method_spec.rb +4 -4
- data/spec/rubocop/cop/rspec/describe_symbol_spec.rb +6 -6
- data/spec/rubocop/cop/rspec/described_class_spec.rb +18 -18
- data/spec/rubocop/cop/rspec/empty_example_group_spec.rb +5 -5
- data/spec/rubocop/cop/rspec/empty_line_after_final_let_spec.rb +9 -9
- data/spec/rubocop/cop/rspec/empty_line_after_subject_spec.rb +5 -5
- data/spec/rubocop/cop/rspec/example_length_spec.rb +6 -6
- data/spec/rubocop/cop/rspec/example_wording_spec.rb +10 -10
- data/spec/rubocop/cop/rspec/expect_actual_spec.rb +10 -10
- data/spec/rubocop/cop/rspec/expect_in_hook_spec.rb +79 -0
- data/spec/rubocop/cop/rspec/expect_output_spec.rb +7 -7
- data/spec/rubocop/cop/rspec/factory_girl/dynamic_attribute_defined_statically_spec.rb +87 -0
- data/spec/rubocop/cop/rspec/file_path_spec.rb +29 -29
- data/spec/rubocop/cop/rspec/focus_spec.rb +6 -6
- data/spec/rubocop/cop/rspec/hook_argument_spec.rb +35 -23
- data/spec/rubocop/cop/rspec/implicit_expect_spec.rb +10 -10
- data/spec/rubocop/cop/rspec/instance_spy_spec.rb +4 -4
- data/spec/rubocop/cop/rspec/instance_variable_spec.rb +7 -7
- data/spec/rubocop/cop/rspec/invalid_predicate_matcher_spec.rb +37 -0
- data/spec/rubocop/cop/rspec/it_behaves_like_spec.rb +4 -4
- data/spec/rubocop/cop/rspec/iterated_expectation_spec.rb +8 -8
- data/spec/rubocop/cop/rspec/leading_subject_spec.rb +5 -5
- data/spec/rubocop/cop/rspec/let_before_examples_spec.rb +83 -0
- data/spec/rubocop/cop/rspec/let_setup_spec.rb +4 -4
- data/spec/rubocop/cop/rspec/message_chain_spec.rb +2 -2
- data/spec/rubocop/cop/rspec/message_expectation_spec.rb +4 -4
- data/spec/rubocop/cop/rspec/message_spies_spec.rb +18 -18
- data/spec/rubocop/cop/rspec/multiple_describes_spec.rb +3 -3
- data/spec/rubocop/cop/rspec/multiple_expectations_spec.rb +45 -9
- data/spec/rubocop/cop/rspec/multiple_subjects_spec.rb +96 -0
- data/spec/rubocop/cop/rspec/named_subject_spec.rb +4 -4
- data/spec/rubocop/cop/rspec/nested_groups_spec.rb +3 -3
- data/spec/rubocop/cop/rspec/not_to_not_spec.rb +4 -4
- data/spec/rubocop/cop/rspec/overwriting_setup_spec.rb +4 -4
- data/spec/rubocop/cop/rspec/predicate_matcher_spec.rb +335 -0
- data/spec/rubocop/cop/rspec/repeated_description_spec.rb +5 -5
- data/spec/rubocop/cop/rspec/repeated_example_spec.rb +5 -5
- data/spec/rubocop/cop/rspec/return_from_stub_spec.rb +85 -0
- data/spec/rubocop/cop/rspec/scattered_let_spec.rb +2 -2
- data/spec/rubocop/cop/rspec/scattered_setup_spec.rb +8 -8
- data/spec/rubocop/cop/rspec/shared_context_spec.rb +10 -10
- data/spec/rubocop/cop/rspec/single_argument_message_chain_spec.rb +10 -10
- data/spec/rubocop/cop/rspec/subject_stub_spec.rb +9 -9
- data/spec/rubocop/cop/rspec/verified_doubles_spec.rb +7 -7
- data/spec/rubocop/cop/rspec/void_expect_spec.rb +47 -0
- data/spec/rubocop/rspec/config_formatter_spec.rb +2 -0
- data/spec/spec_helper.rb +1 -1
- data/spec/support/expect_offense.rb +17 -0
- metadata +39 -51
- data/spec/expect_violation/expectation_spec.rb +0 -85
- data/spec/support/expect_violation.rb +0 -170
@@ -4,7 +4,7 @@ RSpec.describe RuboCop::Cop::RSpec::ExpectActual, :config do
|
|
4
4
|
subject(:cop) { described_class.new(config) }
|
5
5
|
|
6
6
|
it 'flags numeric literal values within expect(...)' do
|
7
|
-
|
7
|
+
expect_offense(<<-RUBY)
|
8
8
|
describe Foo do
|
9
9
|
it 'uses expect incorrectly' do
|
10
10
|
expect(123).to eq(bar)
|
@@ -21,7 +21,7 @@ RSpec.describe RuboCop::Cop::RSpec::ExpectActual, :config do
|
|
21
21
|
end
|
22
22
|
|
23
23
|
it 'flags boolean literal values within expect(...)' do
|
24
|
-
|
24
|
+
expect_offense(<<-RUBY)
|
25
25
|
describe Foo do
|
26
26
|
it 'uses expect incorrectly' do
|
27
27
|
expect(true).to eq(bar)
|
@@ -34,7 +34,7 @@ RSpec.describe RuboCop::Cop::RSpec::ExpectActual, :config do
|
|
34
34
|
end
|
35
35
|
|
36
36
|
it 'flags string and symbol literal values within expect(...)' do
|
37
|
-
|
37
|
+
expect_offense(<<-RUBY)
|
38
38
|
describe Foo do
|
39
39
|
it 'uses expect incorrectly' do
|
40
40
|
expect("foo").to eq(bar)
|
@@ -47,7 +47,7 @@ RSpec.describe RuboCop::Cop::RSpec::ExpectActual, :config do
|
|
47
47
|
end
|
48
48
|
|
49
49
|
it 'flags literal nil value within expect(...)' do
|
50
|
-
|
50
|
+
expect_offense(<<-RUBY)
|
51
51
|
describe Foo do
|
52
52
|
it 'uses expect incorrectly' do
|
53
53
|
expect(nil).to eq(bar)
|
@@ -58,7 +58,7 @@ RSpec.describe RuboCop::Cop::RSpec::ExpectActual, :config do
|
|
58
58
|
end
|
59
59
|
|
60
60
|
it 'does not flag dynamic values within expect(...)' do
|
61
|
-
|
61
|
+
expect_no_offenses(<<-'RUBY')
|
62
62
|
describe Foo do
|
63
63
|
it 'uses expect correctly' do
|
64
64
|
expect(foo).to eq(bar)
|
@@ -70,7 +70,7 @@ RSpec.describe RuboCop::Cop::RSpec::ExpectActual, :config do
|
|
70
70
|
end
|
71
71
|
|
72
72
|
it 'flags arrays containing only literal values within expect(...)' do
|
73
|
-
|
73
|
+
expect_offense(<<-RUBY)
|
74
74
|
describe Foo do
|
75
75
|
it 'uses expect incorrectly' do
|
76
76
|
expect([123]).to eq(bar)
|
@@ -83,7 +83,7 @@ RSpec.describe RuboCop::Cop::RSpec::ExpectActual, :config do
|
|
83
83
|
end
|
84
84
|
|
85
85
|
it 'flags hashes containing only literal values within expect(...)' do
|
86
|
-
|
86
|
+
expect_offense(<<-RUBY)
|
87
87
|
describe Foo do
|
88
88
|
it 'uses expect incorrectly' do
|
89
89
|
expect(foo: 1, bar: 2).to eq(bar)
|
@@ -96,7 +96,7 @@ RSpec.describe RuboCop::Cop::RSpec::ExpectActual, :config do
|
|
96
96
|
end
|
97
97
|
|
98
98
|
it 'flags ranges containing only literal values within expect(...)' do
|
99
|
-
|
99
|
+
expect_offense(<<-RUBY)
|
100
100
|
describe Foo do
|
101
101
|
it 'uses expect incorrectly' do
|
102
102
|
expect(1..2).to eq(bar)
|
@@ -109,7 +109,7 @@ RSpec.describe RuboCop::Cop::RSpec::ExpectActual, :config do
|
|
109
109
|
end
|
110
110
|
|
111
111
|
it 'flags regexps containing only literal values within expect(...)' do
|
112
|
-
|
112
|
+
expect_offense(<<-RUBY)
|
113
113
|
describe Foo do
|
114
114
|
it 'uses expect incorrectly' do
|
115
115
|
expect(/foo|bar/).to eq(bar)
|
@@ -120,7 +120,7 @@ RSpec.describe RuboCop::Cop::RSpec::ExpectActual, :config do
|
|
120
120
|
end
|
121
121
|
|
122
122
|
it 'does not flag complex values with dynamic parts within expect(...)' do
|
123
|
-
|
123
|
+
expect_no_offenses(<<-'RUBY')
|
124
124
|
describe Foo do
|
125
125
|
it 'uses expect incorrectly' do
|
126
126
|
expect.to eq(bar)
|
@@ -0,0 +1,79 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
RSpec.describe RuboCop::Cop::RSpec::ExpectInHook do
|
4
|
+
subject(:cop) { described_class.new }
|
5
|
+
|
6
|
+
it 'adds an offense for `expect` in `before` hook' do
|
7
|
+
expect_offense(<<-RUBY)
|
8
|
+
before do
|
9
|
+
expect(something).to eq('foo')
|
10
|
+
^^^^^^ Do not use `expect` in `before` hook
|
11
|
+
is_expected.to eq('foo')
|
12
|
+
^^^^^^^^^^^ Do not use `is_expected` in `before` hook
|
13
|
+
expect_any_instance_of(Something).to receive(:foo)
|
14
|
+
^^^^^^^^^^^^^^^^^^^^^^ Do not use `expect_any_instance_of` in `before` hook
|
15
|
+
end
|
16
|
+
RUBY
|
17
|
+
end
|
18
|
+
|
19
|
+
it 'adds an offense for `expect` in `after` hook' do
|
20
|
+
expect_offense(<<-RUBY)
|
21
|
+
after do
|
22
|
+
expect(something).to eq('foo')
|
23
|
+
^^^^^^ Do not use `expect` in `after` hook
|
24
|
+
is_expected.to eq('foo')
|
25
|
+
^^^^^^^^^^^ Do not use `is_expected` in `after` hook
|
26
|
+
expect_any_instance_of(Something).to receive(:foo)
|
27
|
+
^^^^^^^^^^^^^^^^^^^^^^ Do not use `expect_any_instance_of` in `after` hook
|
28
|
+
end
|
29
|
+
RUBY
|
30
|
+
end
|
31
|
+
|
32
|
+
it 'adds an offense for `expect` in `around` hook' do
|
33
|
+
expect_offense(<<-RUBY)
|
34
|
+
around do
|
35
|
+
expect(something).to eq('foo')
|
36
|
+
^^^^^^ Do not use `expect` in `around` hook
|
37
|
+
is_expected(something).to eq('foo')
|
38
|
+
^^^^^^^^^^^ Do not use `is_expected` in `around` hook
|
39
|
+
expect_any_instance_of(Something).to receive(:foo)
|
40
|
+
^^^^^^^^^^^^^^^^^^^^^^ Do not use `expect_any_instance_of` in `around` hook
|
41
|
+
end
|
42
|
+
RUBY
|
43
|
+
end
|
44
|
+
|
45
|
+
it 'adds an offense for `expect` with block in `before` hook' do
|
46
|
+
expect_offense(<<-RUBY)
|
47
|
+
before do
|
48
|
+
expect { something }.to eq('foo')
|
49
|
+
^^^^^^ Do not use `expect` in `before` hook
|
50
|
+
end
|
51
|
+
RUBY
|
52
|
+
end
|
53
|
+
|
54
|
+
it 'accepts an empty `before` hook' do
|
55
|
+
expect_no_offenses(<<-RUBY)
|
56
|
+
before do
|
57
|
+
end
|
58
|
+
RUBY
|
59
|
+
end
|
60
|
+
|
61
|
+
it 'accepts `allow` in `before` hook' do
|
62
|
+
expect_no_offenses(<<-RUBY)
|
63
|
+
before do
|
64
|
+
allow(something).to receive(:foo)
|
65
|
+
allow_any_instance_of(something).to receive(:foo)
|
66
|
+
end
|
67
|
+
RUBY
|
68
|
+
end
|
69
|
+
|
70
|
+
it 'accepts `expect` in `it`' do
|
71
|
+
expect_no_offenses(<<-RUBY)
|
72
|
+
it do
|
73
|
+
expect(something).to eq('foo')
|
74
|
+
is_expected.to eq('foo')
|
75
|
+
expect_any_instance_of(something).to receive(:foo)
|
76
|
+
end
|
77
|
+
RUBY
|
78
|
+
end
|
79
|
+
end
|
@@ -6,7 +6,7 @@ RSpec.describe RuboCop::Cop::RSpec::ExpectOutput do
|
|
6
6
|
subject(:cop) { described_class.new }
|
7
7
|
|
8
8
|
it 'registers an offense for overwriting $stdout within an example' do
|
9
|
-
|
9
|
+
expect_offense(<<-RUBY)
|
10
10
|
specify do
|
11
11
|
$stdout = StringIO.new
|
12
12
|
^^^^^^^ Use `expect { ... }.to output(...).to_stdout` instead of mutating $stdout.
|
@@ -16,7 +16,7 @@ RSpec.describe RuboCop::Cop::RSpec::ExpectOutput do
|
|
16
16
|
|
17
17
|
it 'registers an offense for overwriting $stderr ' \
|
18
18
|
'within an example scoped hook' do
|
19
|
-
|
19
|
+
expect_offense(<<-RUBY)
|
20
20
|
before(:each) do
|
21
21
|
$stderr = StringIO.new
|
22
22
|
^^^^^^^ Use `expect { ... }.to output(...).to_stderr` instead of mutating $stderr.
|
@@ -25,7 +25,7 @@ RSpec.describe RuboCop::Cop::RSpec::ExpectOutput do
|
|
25
25
|
end
|
26
26
|
|
27
27
|
it 'does not register an offense for interacting with $stdout' do
|
28
|
-
|
28
|
+
expect_no_offenses(<<-RUBY)
|
29
29
|
specify do
|
30
30
|
$stdout.puts("hi")
|
31
31
|
end
|
@@ -33,7 +33,7 @@ RSpec.describe RuboCop::Cop::RSpec::ExpectOutput do
|
|
33
33
|
end
|
34
34
|
|
35
35
|
it 'does not flag assignments to other global variables' do
|
36
|
-
|
36
|
+
expect_no_offenses(<<-RUBY)
|
37
37
|
specify do
|
38
38
|
$blah = StringIO.new
|
39
39
|
end
|
@@ -41,7 +41,7 @@ RSpec.describe RuboCop::Cop::RSpec::ExpectOutput do
|
|
41
41
|
end
|
42
42
|
|
43
43
|
it 'does not flag assignments to $stdout outside of example scope' do
|
44
|
-
|
44
|
+
expect_no_offenses(<<-RUBY)
|
45
45
|
before(:suite) do
|
46
46
|
$stderr = StringIO.new
|
47
47
|
end
|
@@ -49,7 +49,7 @@ RSpec.describe RuboCop::Cop::RSpec::ExpectOutput do
|
|
49
49
|
end
|
50
50
|
|
51
51
|
it 'does not flag assignments to $stdout in example_group scope' do
|
52
|
-
|
52
|
+
expect_no_offenses(<<-RUBY)
|
53
53
|
describe Foo do
|
54
54
|
$stderr = StringIO.new
|
55
55
|
end
|
@@ -57,6 +57,6 @@ RSpec.describe RuboCop::Cop::RSpec::ExpectOutput do
|
|
57
57
|
end
|
58
58
|
|
59
59
|
it 'does not flag assigns to $stdout when in the root scope' do
|
60
|
-
|
60
|
+
expect_no_offenses('$stderr = StringIO.new')
|
61
61
|
end
|
62
62
|
end
|
@@ -0,0 +1,87 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
# rubocop:disable Metrics/LineLength
|
4
|
+
RSpec.describe RuboCop::Cop::RSpec::FactoryGirl::DynamicAttributeDefinedStatically do
|
5
|
+
subject(:cop) { described_class.new(config) }
|
6
|
+
|
7
|
+
let(:config) { RuboCop::Config.new }
|
8
|
+
|
9
|
+
it 'registers an offense for offending code' do
|
10
|
+
expect_offense(<<-RUBY)
|
11
|
+
FactoryGirl.define do
|
12
|
+
factory :post do
|
13
|
+
published_at 1.day.from_now
|
14
|
+
^^^^^^^^^^^^^^^^^^^^^^^^^^^ Use a block to set a dynamic value to an attribute.
|
15
|
+
status [:draft, :published].sample
|
16
|
+
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ Use a block to set a dynamic value to an attribute.
|
17
|
+
created_at 1.day.ago
|
18
|
+
^^^^^^^^^^^^^^^^^^^^ Use a block to set a dynamic value to an attribute.
|
19
|
+
end
|
20
|
+
end
|
21
|
+
RUBY
|
22
|
+
end
|
23
|
+
|
24
|
+
it 'registers an offense in a trait' do
|
25
|
+
expect_offense(<<-RUBY)
|
26
|
+
FactoryGirl.define do
|
27
|
+
factory :post do
|
28
|
+
title "Something"
|
29
|
+
trait :published do
|
30
|
+
published_at 1.day.from_now
|
31
|
+
^^^^^^^^^^^^^^^^^^^^^^^^^^^ Use a block to set a dynamic value to an attribute.
|
32
|
+
end
|
33
|
+
end
|
34
|
+
end
|
35
|
+
RUBY
|
36
|
+
end
|
37
|
+
|
38
|
+
it 'accepts' do
|
39
|
+
expect_no_offenses(<<-RUBY)
|
40
|
+
FactoryGirl.define do
|
41
|
+
factory :post do
|
42
|
+
trait :published do
|
43
|
+
published_at { 1.day.from_now }
|
44
|
+
end
|
45
|
+
created_at { 1.day.ago }
|
46
|
+
status :draft
|
47
|
+
comments_count 0
|
48
|
+
title "Static"
|
49
|
+
description { FFaker::Lorem.paragraph(10) }
|
50
|
+
tag Tag::MAGIC
|
51
|
+
end
|
52
|
+
end
|
53
|
+
RUBY
|
54
|
+
end
|
55
|
+
|
56
|
+
it 'does not add offense if out of factory girl block' do
|
57
|
+
expect_no_offenses(<<-RUBY)
|
58
|
+
status [:draft, :published].sample
|
59
|
+
published_at 1.day.from_now
|
60
|
+
created_at 1.day.ago
|
61
|
+
RUBY
|
62
|
+
end
|
63
|
+
|
64
|
+
bad = <<-RUBY
|
65
|
+
FactoryGirl.define do
|
66
|
+
factory :post do
|
67
|
+
status([:draft, :published].sample)
|
68
|
+
published_at 1.day.from_now
|
69
|
+
created_at(1.day.ago)
|
70
|
+
updated_at Time.current
|
71
|
+
end
|
72
|
+
end
|
73
|
+
RUBY
|
74
|
+
|
75
|
+
corrected = <<-RUBY
|
76
|
+
FactoryGirl.define do
|
77
|
+
factory :post do
|
78
|
+
status { [:draft, :published].sample }
|
79
|
+
published_at { 1.day.from_now }
|
80
|
+
created_at { 1.day.ago }
|
81
|
+
updated_at { Time.current }
|
82
|
+
end
|
83
|
+
end
|
84
|
+
RUBY
|
85
|
+
|
86
|
+
include_examples 'autocorrect', bad, corrected
|
87
|
+
end
|
@@ -2,170 +2,170 @@ RSpec.describe RuboCop::Cop::RSpec::FilePath, :config do
|
|
2
2
|
subject(:cop) { described_class.new(config) }
|
3
3
|
|
4
4
|
it 'registers an offense for a bad path' do
|
5
|
-
|
5
|
+
expect_offense(<<-RUBY, 'wrong_path_foo_spec.rb')
|
6
6
|
describe MyClass, 'foo' do; end
|
7
7
|
^^^^^^^^^^^^^^^^^^^^^^^ Spec path should end with `my_class*foo*_spec.rb`.
|
8
8
|
RUBY
|
9
9
|
end
|
10
10
|
|
11
11
|
it 'registers an offense for a wrong class but a correct method' do
|
12
|
-
|
12
|
+
expect_offense(<<-RUBY, 'wrong_class_foo_spec.rb')
|
13
13
|
describe MyClass, '#foo' do; end
|
14
14
|
^^^^^^^^^^^^^^^^^^^^^^^^ Spec path should end with `my_class*foo*_spec.rb`.
|
15
15
|
RUBY
|
16
16
|
end
|
17
17
|
|
18
18
|
it 'registers an offense for a repeated .rb' do
|
19
|
-
|
19
|
+
expect_offense(<<-RUBY, 'my_class/foo_spec.rb.rb')
|
20
20
|
describe MyClass, '#foo' do; end
|
21
21
|
^^^^^^^^^^^^^^^^^^^^^^^^ Spec path should end with `my_class*foo*_spec.rb`.
|
22
22
|
RUBY
|
23
23
|
end
|
24
24
|
|
25
25
|
it 'registers an offense for a file missing a .rb' do
|
26
|
-
|
26
|
+
expect_offense(<<-RUBY, 'my_class/foo_specorb')
|
27
27
|
describe MyClass, '#foo' do; end
|
28
28
|
^^^^^^^^^^^^^^^^^^^^^^^^ Spec path should end with `my_class*foo*_spec.rb`.
|
29
29
|
RUBY
|
30
30
|
end
|
31
31
|
|
32
32
|
it 'registers an offense for a wrong class and highlights metadata' do
|
33
|
-
|
33
|
+
expect_offense(<<-RUBY, 'wrong_class_foo_spec.rb')
|
34
34
|
describe MyClass, '#foo', blah: :blah do; end
|
35
35
|
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ Spec path should end with `my_class*foo*_spec.rb`.
|
36
36
|
RUBY
|
37
37
|
end
|
38
38
|
|
39
39
|
it 'registers an offense for a wrong class name' do
|
40
|
-
|
40
|
+
expect_offense(<<-RUBY, 'wrong_class_spec.rb')
|
41
41
|
describe MyClass do; end
|
42
42
|
^^^^^^^^^^^^^^^^ Spec path should end with `my_class*_spec.rb`.
|
43
43
|
RUBY
|
44
44
|
end
|
45
45
|
|
46
46
|
it 'registers an offense for a wrong class name with a symbol argument' do
|
47
|
-
|
47
|
+
expect_offense(<<-RUBY, 'wrong_class_spec.rb')
|
48
48
|
describe MyClass, :foo do; end
|
49
49
|
^^^^^^^^^^^^^^^^^^^^^^ Spec path should end with `my_class*_spec.rb`.
|
50
50
|
RUBY
|
51
51
|
end
|
52
52
|
|
53
53
|
it 'registers an offense for a file missing _spec' do
|
54
|
-
|
54
|
+
expect_offense(<<-RUBY, 'user.rb')
|
55
55
|
describe User do; end
|
56
56
|
^^^^^^^^^^^^^ Spec path should end with `user*_spec.rb`.
|
57
57
|
RUBY
|
58
58
|
end
|
59
59
|
|
60
60
|
it 'skips specs that do not describe a class / method' do
|
61
|
-
|
61
|
+
expect_no_offenses(<<-RUBY, 'some/class/spec.rb')
|
62
62
|
describe 'Test something' do; end
|
63
63
|
RUBY
|
64
64
|
end
|
65
65
|
|
66
66
|
it 'skips specs that do have multiple top level describes' do
|
67
|
-
|
67
|
+
expect_no_offenses(<<-RUBY, 'some/class/spec.rb')
|
68
68
|
describe MyClass, 'do_this' do; end
|
69
69
|
describe MyClass, 'do_that' do; end
|
70
70
|
RUBY
|
71
71
|
end
|
72
72
|
|
73
73
|
it 'checks class specs' do
|
74
|
-
|
74
|
+
expect_no_offenses(<<-RUBY, 'some/class_spec.rb')
|
75
75
|
describe Some::Class do; end
|
76
76
|
RUBY
|
77
77
|
end
|
78
78
|
|
79
79
|
it 'allows different parent directories' do
|
80
|
-
|
80
|
+
expect_no_offenses(<<-RUBY, 'parent_dir/some/class_spec.rb')
|
81
81
|
describe Some::Class do; end
|
82
82
|
RUBY
|
83
83
|
end
|
84
84
|
|
85
85
|
it 'handles CamelCaps class names' do
|
86
|
-
|
86
|
+
expect_no_offenses(<<-RUBY, 'my_class_spec.rb')
|
87
87
|
describe MyClass do; end
|
88
88
|
RUBY
|
89
89
|
end
|
90
90
|
|
91
91
|
it 'handles ACRONYMClassNames' do
|
92
|
-
|
92
|
+
expect_no_offenses(<<-RUBY, 'abc_one/two_spec.rb')
|
93
93
|
describe ABCOne::Two do; end
|
94
94
|
RUBY
|
95
95
|
end
|
96
96
|
|
97
97
|
it 'handles ALLCAPS class names' do
|
98
|
-
|
98
|
+
expect_no_offenses(<<-RUBY, 'allcaps_spec.rb')
|
99
99
|
describe ALLCAPS do; end
|
100
100
|
RUBY
|
101
101
|
end
|
102
102
|
|
103
103
|
it 'handles alphanumeric class names' do
|
104
|
-
|
104
|
+
expect_no_offenses(<<-RUBY, 'ipv4_and_ipv6_spec.rb')
|
105
105
|
describe IPV4AndIPV6 do; end
|
106
106
|
RUBY
|
107
107
|
end
|
108
108
|
|
109
109
|
it 'checks instance methods' do
|
110
|
-
|
110
|
+
expect_no_offenses(<<-RUBY, 'some/class/inst_spec.rb')
|
111
111
|
describe Some::Class, '#inst' do; end
|
112
112
|
RUBY
|
113
113
|
end
|
114
114
|
|
115
115
|
it 'checks class methods' do
|
116
|
-
|
116
|
+
expect_no_offenses(<<-RUBY, 'some/class/inst_spec.rb')
|
117
117
|
describe Some::Class, '.inst' do; end
|
118
118
|
RUBY
|
119
119
|
end
|
120
120
|
|
121
121
|
it 'allows flat hierarchies for instance methods' do
|
122
|
-
|
122
|
+
expect_no_offenses(<<-RUBY, 'some/class_inst_spec.rb')
|
123
123
|
describe Some::Class, '#inst' do; end
|
124
124
|
RUBY
|
125
125
|
end
|
126
126
|
|
127
127
|
it 'allows flat hierarchies for class methods' do
|
128
|
-
|
128
|
+
expect_no_offenses(<<-RUBY, 'some/class_inst_spec.rb')
|
129
129
|
describe Some::Class, '.inst' do; end
|
130
130
|
RUBY
|
131
131
|
end
|
132
132
|
|
133
133
|
it 'allows subdirs for instance methods' do
|
134
134
|
filename = 'some/class/instance_methods/inst_spec.rb'
|
135
|
-
|
135
|
+
expect_no_offenses(<<-RUBY, filename)
|
136
136
|
describe Some::Class, '#inst' do; end
|
137
137
|
RUBY
|
138
138
|
end
|
139
139
|
|
140
140
|
it 'allows subdirs for class methods' do
|
141
141
|
filename = 'some/class/class_methods/inst_spec.rb'
|
142
|
-
|
142
|
+
expect_no_offenses(<<-RUBY, filename)
|
143
143
|
describe Some::Class, '.inst' do; end
|
144
144
|
RUBY
|
145
145
|
end
|
146
146
|
|
147
147
|
it 'ignores non-alphanumeric characters' do
|
148
|
-
|
148
|
+
expect_no_offenses(<<-RUBY, 'some/class/pred_spec.rb')
|
149
149
|
describe Some::Class, '#pred?' do; end
|
150
150
|
RUBY
|
151
151
|
end
|
152
152
|
|
153
153
|
it 'allows bang method' do
|
154
|
-
|
154
|
+
expect_no_offenses(<<-RUBY, 'some/class/bang_spec.rb')
|
155
155
|
describe Some::Class, '#bang!' do; end
|
156
156
|
RUBY
|
157
157
|
end
|
158
158
|
|
159
159
|
it 'allows flexibility with predicates' do
|
160
160
|
filename = 'some/class/thing_predicate_spec.rb'
|
161
|
-
|
161
|
+
expect_no_offenses(<<-RUBY, filename)
|
162
162
|
describe Some::Class, '#thing?' do; end
|
163
163
|
RUBY
|
164
164
|
end
|
165
165
|
|
166
166
|
it 'allows flexibility with operators' do
|
167
167
|
filename = 'my_little_class/spaceship_operator_spec.rb'
|
168
|
-
|
168
|
+
expect_no_offenses(<<-RUBY, filename)
|
169
169
|
describe MyLittleClass, '#<=>' do; end
|
170
170
|
RUBY
|
171
171
|
end
|
@@ -174,13 +174,13 @@ RSpec.describe RuboCop::Cop::RSpec::FilePath, :config do
|
|
174
174
|
let(:cop_config) { { 'CustomTransform' => { 'FooFoo' => 'foofoo' } } }
|
175
175
|
|
176
176
|
it 'respects custom module name transformation' do
|
177
|
-
|
177
|
+
expect_no_offenses(<<-RUBY, 'foofoo/some/class/bar_spec.rb')
|
178
178
|
describe FooFoo::Some::Class, '#bar' do; end
|
179
179
|
RUBY
|
180
180
|
end
|
181
181
|
|
182
182
|
it 'ignores routing specs' do
|
183
|
-
|
183
|
+
expect_no_offenses(<<-RUBY, 'foofoo/some/class/bar_spec.rb')
|
184
184
|
describe MyController, "#foo", type: :routing do; end
|
185
185
|
RUBY
|
186
186
|
end
|
@@ -190,7 +190,7 @@ RSpec.describe RuboCop::Cop::RSpec::FilePath, :config do
|
|
190
190
|
let(:cop_config) { { 'IgnoreMethods' => true } }
|
191
191
|
|
192
192
|
it 'does not care about the described method' do
|
193
|
-
|
193
|
+
expect_no_offenses(<<-RUBY, 'my_class_spec.rb')
|
194
194
|
describe MyClass, '#look_here_a_method' do; end
|
195
195
|
RUBY
|
196
196
|
end
|