rubocop-rspec 1.17.1 → 1.18.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 +7 -0
- data/config/default.yml +5 -0
- data/lib/rubocop-rspec.rb +1 -0
- data/lib/rubocop/cop/rspec/capybara/current_path_expectation.rb +42 -0
- data/lib/rubocop/cop/rspec/capybara/feature_methods.rb +7 -5
- data/lib/rubocop/cop/rspec/let_before_examples.rb +6 -2
- data/lib/rubocop/rspec/version.rb +1 -1
- data/spec/rubocop/cop/rspec/capybara/current_path_expectation_spec.rb +29 -0
- data/spec/rubocop/cop/rspec/capybara/feature_methods_spec.rb +10 -0
- data/spec/rubocop/cop/rspec/let_before_examples_spec.rb +10 -0
- metadata +5 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: fef3eb92e763b31bdcf1b4a1adc0557e603b63d6
|
4
|
+
data.tar.gz: 48a039a782f517efb9cd9b7ff84f30acce3b9644
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 98638e435ef551ee81ee340767d6adf1de37bf36f3b848514cd244fbb6b7d8a43c2a30c049eb6454376e35d98f86f17e3bd2afbcc985ef424a73499c3b182ba6
|
7
|
+
data.tar.gz: a4024e740e9a5fc79189dfae61b2ba62e5b2ea649f78be9c3aa1b733c47b7bb9bed4a73744e4773f2cd402f8d99caae2e6c1d5e509d07cda2d789730d8783a18
|
data/CHANGELOG.md
CHANGED
@@ -2,6 +2,12 @@
|
|
2
2
|
|
3
3
|
## Master (Unreleased)
|
4
4
|
|
5
|
+
## 1.18.0 (2017-09-29)
|
6
|
+
|
7
|
+
* Fix false positive in `Capybara/FeatureMethods`. ([@Darhazer][])
|
8
|
+
* Add `RSpec/Capybara/CurrentPathExpectation` cop for feature specs, disallowing setting expectations on `current_path`. ([@timrogers][])
|
9
|
+
* Fix false positive in `RSpec/LetBeforeExamples` cop when example group contains single let. ([@Darhazer][])
|
10
|
+
|
5
11
|
## 1.17.1 (2017-09-20)
|
6
12
|
|
7
13
|
* Improved `RSpec/ReturnFromStub` to handle string interpolation, hashes and do..end blocks. ([@Darhazer][])
|
@@ -248,3 +254,4 @@
|
|
248
254
|
[@pocke]: https://github.com/pocke
|
249
255
|
[@bmorrall]: https:/github.com/bmorrall
|
250
256
|
[@zverok]: https:/github.com/zverok
|
257
|
+
[@timrogers]: https://github.com/timrogers
|
data/config/default.yml
CHANGED
@@ -325,6 +325,11 @@ RSpec/VoidExpect:
|
|
325
325
|
Enabled: true
|
326
326
|
StyleGuide: http://www.rubydoc.info/gems/rubocop-rspec/RuboCop/Cop/RSpec/VoidExpect
|
327
327
|
|
328
|
+
Capybara/CurrentPathExpectation:
|
329
|
+
Description: Checks that no expectations are set on Capybara's `current_path`.
|
330
|
+
Enabled: true
|
331
|
+
StyleGuide: http://www.rubydoc.info/gems/rubocop-rspec/RuboCop/Cop/RSpec/Capybara/CurrentPathExpectation
|
332
|
+
|
328
333
|
Capybara/FeatureMethods:
|
329
334
|
Description: Checks for consistent method usage in feature specs.
|
330
335
|
Enabled: true
|
data/lib/rubocop-rspec.rb
CHANGED
@@ -29,6 +29,7 @@ require 'rubocop/cop/rspec/any_instance'
|
|
29
29
|
require 'rubocop/cop/rspec/around_block'
|
30
30
|
require 'rubocop/cop/rspec/be_eql'
|
31
31
|
require 'rubocop/cop/rspec/before_after_all'
|
32
|
+
require 'rubocop/cop/rspec/capybara/current_path_expectation'
|
32
33
|
require 'rubocop/cop/rspec/capybara/feature_methods'
|
33
34
|
require 'rubocop/cop/rspec/describe_class'
|
34
35
|
require 'rubocop/cop/rspec/describe_method'
|
@@ -0,0 +1,42 @@
|
|
1
|
+
module RuboCop
|
2
|
+
module Cop
|
3
|
+
module RSpec
|
4
|
+
module Capybara
|
5
|
+
# Checks that no expectations are set on Capybara's `current_path`.
|
6
|
+
#
|
7
|
+
# The `have_current_path` matcher (http://www.rubydoc.info/github/
|
8
|
+
# teamcapybara/capybara/master/Capybara/RSpecMatchers#have_current_path-
|
9
|
+
# instance_method) should be used on `page` to set expectations on
|
10
|
+
# Capybara's current path, since it uses Capybara's waiting
|
11
|
+
# functionality (https://github.com/teamcapybara/capybara/blob/master/
|
12
|
+
# README.md#asynchronous-javascript-ajax-and-friends) which ensures that
|
13
|
+
# preceding actions (like `click_link`) have completed.
|
14
|
+
#
|
15
|
+
# @example
|
16
|
+
# # bad
|
17
|
+
# expect(current_path).to eq('/callback')
|
18
|
+
# expect(page.current_path).to match(/widgets/)
|
19
|
+
#
|
20
|
+
# # good
|
21
|
+
# expect(page).to have_current_path("/callback")
|
22
|
+
# expect(page).to have_current_path(/widgets/)
|
23
|
+
#
|
24
|
+
class CurrentPathExpectation < Cop
|
25
|
+
MSG = 'Do not set an RSpec expectation on `current_path` in ' \
|
26
|
+
'Capybara feature specs - instead, use the ' \
|
27
|
+
'`have_current_path` matcher on `page`'.freeze
|
28
|
+
|
29
|
+
def_node_matcher :expectation_set_on_current_path, <<-PATTERN
|
30
|
+
(send nil :expect (send {(send nil :page) nil} :current_path))
|
31
|
+
PATTERN
|
32
|
+
|
33
|
+
def on_send(node)
|
34
|
+
expectation_set_on_current_path(node) do
|
35
|
+
add_offense(node, :selector)
|
36
|
+
end
|
37
|
+
end
|
38
|
+
end
|
39
|
+
end
|
40
|
+
end
|
41
|
+
end
|
42
|
+
end
|
@@ -45,13 +45,15 @@ module RuboCop
|
|
45
45
|
feature: :describe
|
46
46
|
}.freeze
|
47
47
|
|
48
|
-
def_node_matcher :feature_method
|
49
|
-
(
|
48
|
+
def_node_matcher :feature_method, <<-PATTERN
|
49
|
+
(block
|
50
|
+
$(send {(const nil :RSpec) nil} ${#{MAP.keys.map(&:inspect).join(' ')}} ...)
|
51
|
+
...)
|
50
52
|
PATTERN
|
51
53
|
|
52
|
-
def
|
53
|
-
feature_method
|
54
|
-
add_offense(
|
54
|
+
def on_block(node)
|
55
|
+
feature_method(node) do |send_node, match|
|
56
|
+
add_offense(send_node, :selector, format(MSG, MAP[match], match))
|
55
57
|
end
|
56
58
|
end
|
57
59
|
|
@@ -44,9 +44,13 @@ module RuboCop
|
|
44
44
|
def on_block(node)
|
45
45
|
return unless example_group_with_body?(node)
|
46
46
|
|
47
|
-
|
47
|
+
check_let_declarations(node.body) if multiline_block?(node.body)
|
48
|
+
end
|
49
|
+
|
50
|
+
private
|
48
51
|
|
49
|
-
|
52
|
+
def multiline_block?(block)
|
53
|
+
block.begin_type?
|
50
54
|
end
|
51
55
|
|
52
56
|
def check_let_declarations(node)
|
@@ -0,0 +1,29 @@
|
|
1
|
+
RSpec.describe RuboCop::Cop::RSpec::Capybara::CurrentPathExpectation do
|
2
|
+
subject(:cop) { described_class.new }
|
3
|
+
|
4
|
+
it 'flags violations for `expect(current_path)`' do
|
5
|
+
expect_offense(<<-RUBY)
|
6
|
+
expect(current_path).to eq("/callback")
|
7
|
+
^^^^^^ Do not set an RSpec expectation on `current_path` in Capybara feature specs - instead, use the `have_current_path` matcher on `page`
|
8
|
+
RUBY
|
9
|
+
end
|
10
|
+
|
11
|
+
it 'flags violations for `expect(page.current_path)`' do
|
12
|
+
expect_offense(<<-RUBY)
|
13
|
+
expect(page.current_path).to eq("/callback")
|
14
|
+
^^^^^^ Do not set an RSpec expectation on `current_path` in Capybara feature specs - instead, use the `have_current_path` matcher on `page`
|
15
|
+
RUBY
|
16
|
+
end
|
17
|
+
|
18
|
+
it "doesn't flag a violation for other expectations" do
|
19
|
+
expect_no_offenses(<<-RUBY)
|
20
|
+
expect(current_user).to eq(user)
|
21
|
+
RUBY
|
22
|
+
end
|
23
|
+
|
24
|
+
it "doesn't flag a violation for other references to `current_path`" do
|
25
|
+
expect_no_offenses(<<-RUBY)
|
26
|
+
current_path = WalkingRoute.last.path
|
27
|
+
RUBY
|
28
|
+
end
|
29
|
+
end
|
@@ -43,6 +43,16 @@ RSpec.describe RuboCop::Cop::RSpec::Capybara::FeatureMethods do
|
|
43
43
|
RUBY
|
44
44
|
end
|
45
45
|
|
46
|
+
it 'ignores variables inside examples' do
|
47
|
+
expect_no_offenses(<<-RUBY)
|
48
|
+
it 'is valid code' do
|
49
|
+
given(feature)
|
50
|
+
assign(background)
|
51
|
+
run scenario
|
52
|
+
end
|
53
|
+
RUBY
|
54
|
+
end
|
55
|
+
|
46
56
|
include_examples 'autocorrect', 'background { }', 'before { }'
|
47
57
|
include_examples 'autocorrect', 'scenario { }', 'it { }'
|
48
58
|
include_examples 'autocorrect', 'xscenario { }', 'xit { }'
|
@@ -76,6 +76,16 @@ RSpec.describe RuboCop::Cop::RSpec::LetBeforeExamples do
|
|
76
76
|
RUBY
|
77
77
|
end
|
78
78
|
|
79
|
+
it 'ignores single-line example blocks' do
|
80
|
+
expect_no_offenses(<<-RUBY)
|
81
|
+
RSpec.describe User do
|
82
|
+
include_examples 'special user' do
|
83
|
+
let(:foo) { bar }
|
84
|
+
end
|
85
|
+
end
|
86
|
+
RUBY
|
87
|
+
end
|
88
|
+
|
79
89
|
it 'does not encounter an error when handling an empty describe' do
|
80
90
|
expect { inspect_source('RSpec.describe(User) do end', 'a_spec.rb') }
|
81
91
|
.not_to raise_error
|
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.18.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- John Backus
|
@@ -10,7 +10,7 @@ authors:
|
|
10
10
|
autorequire:
|
11
11
|
bindir: bin
|
12
12
|
cert_chain: []
|
13
|
-
date: 2017-09-
|
13
|
+
date: 2017-09-29 00:00:00.000000000 Z
|
14
14
|
dependencies:
|
15
15
|
- !ruby/object:Gem::Dependency
|
16
16
|
name: rubocop
|
@@ -108,6 +108,7 @@ files:
|
|
108
108
|
- lib/rubocop/cop/rspec/around_block.rb
|
109
109
|
- lib/rubocop/cop/rspec/be_eql.rb
|
110
110
|
- lib/rubocop/cop/rspec/before_after_all.rb
|
111
|
+
- lib/rubocop/cop/rspec/capybara/current_path_expectation.rb
|
111
112
|
- lib/rubocop/cop/rspec/capybara/feature_methods.rb
|
112
113
|
- lib/rubocop/cop/rspec/cop.rb
|
113
114
|
- lib/rubocop/cop/rspec/describe_class.rb
|
@@ -183,6 +184,7 @@ files:
|
|
183
184
|
- spec/rubocop/cop/rspec/around_block_spec.rb
|
184
185
|
- spec/rubocop/cop/rspec/be_eql_spec.rb
|
185
186
|
- spec/rubocop/cop/rspec/before_after_all_spec.rb
|
187
|
+
- spec/rubocop/cop/rspec/capybara/current_path_expectation_spec.rb
|
186
188
|
- spec/rubocop/cop/rspec/capybara/feature_methods_spec.rb
|
187
189
|
- spec/rubocop/cop/rspec/cop_spec.rb
|
188
190
|
- spec/rubocop/cop/rspec/describe_class_spec.rb
|
@@ -277,6 +279,7 @@ test_files:
|
|
277
279
|
- spec/rubocop/cop/rspec/around_block_spec.rb
|
278
280
|
- spec/rubocop/cop/rspec/be_eql_spec.rb
|
279
281
|
- spec/rubocop/cop/rspec/before_after_all_spec.rb
|
282
|
+
- spec/rubocop/cop/rspec/capybara/current_path_expectation_spec.rb
|
280
283
|
- spec/rubocop/cop/rspec/capybara/feature_methods_spec.rb
|
281
284
|
- spec/rubocop/cop/rspec/cop_spec.rb
|
282
285
|
- spec/rubocop/cop/rspec/describe_class_spec.rb
|