rubocop-rspec 1.2.2 → 1.3.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/CHANGELOG.md +7 -0
- data/lib/rubocop/cop/rspec/describe_class.rb +16 -2
- data/lib/rubocop/cop/rspec/describe_method.rb +1 -1
- data/lib/rubocop/cop/rspec/file_path.rb +3 -1
- data/lib/rubocop/rspec/top_level_describe.rb +0 -2
- data/lib/rubocop/rspec/version.rb +1 -1
- data/spec/rubocop/cop/rspec/describe_class_spec.rb +17 -0
- data/spec/rubocop/cop/rspec/describe_method_spec.rb +6 -0
- data/spec/rubocop/cop/rspec/file_path_spec.rb +10 -0
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 885b88b3cfe9f4d470eed5daccc1071135e59e11
|
4
|
+
data.tar.gz: 0d91a813ca891c4b7b90227188a87d24250088cf
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 8f100ef7123bf5a9df50d45dae99592e1704cab30aa12e24f4d1d8d58e851b88c0db6f9efc46b531743fdcf487f295a75fd1033b0a05e8c2de2d4cf25c9499bd
|
7
|
+
data.tar.gz: d9ec52c5ac1aebb71bd8e16303ecc479f4fdde51d1ff9fa27dc1f1bf95d4b9f80d8e7389aa472f400d91a532e4aff8d6168c9b4b7761aa32fab560845591b5d6
|
data/CHANGELOG.md
CHANGED
@@ -1,5 +1,11 @@
|
|
1
1
|
# Change log
|
2
2
|
|
3
|
+
# 1.3.0
|
4
|
+
|
5
|
+
* Ignore non string arguments for FilePathCop - thanks to @deivid-rodriguez. ([@geniou][])
|
6
|
+
* Skip DescribeMethod cop for tagged specs. ([@deivid-rodriguez][])
|
7
|
+
* Skip DescribeClass cop for feature/request specs. ([@deivid-rodriguez][])
|
8
|
+
|
3
9
|
# 1.2.2
|
4
10
|
|
5
11
|
* Make `RSpec::ExampleWording` case insensitive. ([@geniou][])
|
@@ -48,6 +54,7 @@
|
|
48
54
|
<!-- Contributors -->
|
49
55
|
|
50
56
|
[@andyw8]: https://github.com/andyw8
|
57
|
+
[@deivid-rodriguez]: https://github.com/deivid-rodriguez
|
51
58
|
[@geniou]: https://github.com/geniou
|
52
59
|
[@nevir]: https://github.com/nevir
|
53
60
|
[@pstengel]: https://github.com/pstengel
|
@@ -14,15 +14,29 @@ module RuboCop
|
|
14
14
|
# # good
|
15
15
|
# describe TestedClass do
|
16
16
|
# end
|
17
|
+
#
|
18
|
+
# describe "A feature example", type: :feature do
|
19
|
+
# end
|
17
20
|
class DescribeClass < Cop
|
18
21
|
include RuboCop::RSpec::TopLevelDescribe
|
19
22
|
|
23
|
+
REQUEST_PAIR = s(:pair, s(:sym, :type), s(:sym, :request))
|
24
|
+
FEATURE_PAIR = s(:pair, s(:sym, :type), s(:sym, :feature))
|
25
|
+
|
20
26
|
MESSAGE = 'The first argument to describe should be the class or ' \
|
21
27
|
'module being tested.'
|
22
28
|
|
23
29
|
def on_top_level_describe(_node, args)
|
24
|
-
return if args
|
25
|
-
|
30
|
+
return if args[0] && args[0].type == :const
|
31
|
+
|
32
|
+
return if args[1..-1].any? do |arg|
|
33
|
+
next unless arg.hash_type?
|
34
|
+
arg.children.any? do |n|
|
35
|
+
[REQUEST_PAIR, FEATURE_PAIR].include?(n)
|
36
|
+
end
|
37
|
+
end
|
38
|
+
|
39
|
+
add_offense(args[0], :expression, MESSAGE)
|
26
40
|
end
|
27
41
|
end
|
28
42
|
end
|
@@ -26,7 +26,7 @@ module RuboCop
|
|
26
26
|
|
27
27
|
def on_top_level_describe(_node, args)
|
28
28
|
second_arg = args[1]
|
29
|
-
return unless second_arg
|
29
|
+
return unless second_arg && second_arg.type == :str
|
30
30
|
return if METHOD_STRING_MATCHER =~ second_arg.children.first
|
31
31
|
|
32
32
|
add_offense(second_arg, :expression, MESSAGE)
|
@@ -35,7 +35,9 @@ module RuboCop
|
|
35
35
|
|
36
36
|
def matcher(object, method)
|
37
37
|
path = File.join(parts(object))
|
38
|
-
|
38
|
+
if method && method.type == :str
|
39
|
+
path += '*' + method.children.first.gsub(/\W+/, '')
|
40
|
+
end
|
39
41
|
|
40
42
|
"#{path}*_spec.rb"
|
41
43
|
end
|
@@ -27,6 +27,23 @@ describe RuboCop::Cop::RSpec::DescribeClass do
|
|
27
27
|
expect(cop.offenses).to be_empty
|
28
28
|
end
|
29
29
|
|
30
|
+
it 'ignores request specs' do
|
31
|
+
inspect_source(cop, "describe 'my new feature', type: :request do; end")
|
32
|
+
expect(cop.offenses).to be_empty
|
33
|
+
end
|
34
|
+
|
35
|
+
it 'ignores feature specs' do
|
36
|
+
inspect_source(cop, "describe 'my new feature', type: :feature do; end")
|
37
|
+
expect(cop.offenses).to be_empty
|
38
|
+
end
|
39
|
+
|
40
|
+
it 'ignores feature specs - also with complex options' do
|
41
|
+
inspect_source(cop, ["describe 'my new feature',",
|
42
|
+
' :test, :type => :feature, :foo => :bar do;',
|
43
|
+
'end'])
|
44
|
+
expect(cop.offenses).to be_empty
|
45
|
+
end
|
46
|
+
|
30
47
|
it "doesn't blow up on single-line describes" do
|
31
48
|
inspect_source(cop, 'describe Some::Class')
|
32
49
|
expect(cop.offenses).to be_empty
|
@@ -17,4 +17,10 @@ describe RuboCop::Cop::RSpec::DescribeMethod do
|
|
17
17
|
"describe Some::Class, '#fdsa' do; end"])
|
18
18
|
expect(cop.offenses).to be_empty
|
19
19
|
end
|
20
|
+
|
21
|
+
it 'skips specs not having a string second argument' do
|
22
|
+
inspect_source(cop, 'describe Some::Class, :config do; end')
|
23
|
+
|
24
|
+
expect(cop.offenses).to be_empty
|
25
|
+
end
|
20
26
|
end
|
@@ -49,6 +49,16 @@ describe RuboCop::Cop::RSpec::FilePath, :config do
|
|
49
49
|
expect(cop.offenses).to be_empty
|
50
50
|
end
|
51
51
|
|
52
|
+
it 'ignores second argument if is not a string' do
|
53
|
+
inspect_source(cop,
|
54
|
+
'describe MyClass, :foo do; end',
|
55
|
+
'wrong_class_spec.rb')
|
56
|
+
expect(cop.offenses.size).to eq(1)
|
57
|
+
expect(cop.offenses.map(&:line).sort).to eq([1])
|
58
|
+
expect(cop.messages)
|
59
|
+
.to eq(['Spec path should end with `my_class*_spec.rb`'])
|
60
|
+
end
|
61
|
+
|
52
62
|
it 'checks class specs' do
|
53
63
|
inspect_source(cop,
|
54
64
|
'describe Some::Class do; end',
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: rubocop-rspec
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.
|
4
|
+
version: 1.3.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Ian MacLeod
|
@@ -9,7 +9,7 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2015-
|
12
|
+
date: 2015-04-23 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: rubocop
|