Class: RuboCop::Cop::RSpec::Capybara::CurrentPathExpectation
- Extended by:
- AutoCorrector
- Defined in:
- lib/rubocop/cop/rspec/capybara/current_path_expectation.rb
Overview
Checks that no expectations are set on Capybara's `current_path`.
The www.rubydoc.info/github/teamcapybara/capybara/master/Capybara/RSpecMatchers#have_current_path-instance_method[`have_current_path` matcher] should be used on `page` to set expectations on Capybara's current path, since it uses github.com/teamcapybara/capybara/blob/master/README.md#asynchronous-javascript-ajax-and-friends[Capybara’s waiting functionality] which ensures that preceding actions (like `click_link`) have completed.
Constant Summary collapse
- MSG =
'Do not set an RSpec expectation on `current_path` in ' \ 'Capybara feature specs - instead, use the ' \ '`have_current_path` matcher on `page`'
- RESTRICT_ON_SEND =
%i[expect].freeze
Class Method Summary collapse
Instance Method Summary collapse
-
#as_is_matcher(node) ⇒ Object
Supported matchers: eq(…) / match(/regexp/) / match('regexp').
- #expectation_set_on_current_path(node) ⇒ Object
- #on_send(node) ⇒ Object
- #regexp_str_matcher(node) ⇒ Object
Methods inherited from Base
inherited, #on_new_investigation
Methods included from RSpec::Language::NodePattern
Methods included from RSpec::Language
#example?, #example_group?, #example_group_with_body?, #hook?, #include?, #let?, #rspec?, #shared_group?, #spec_group?, #subject?
Class Method Details
.autocorrect_incompatible_with ⇒ Object
55 56 57 |
# File 'lib/rubocop/cop/rspec/capybara/current_path_expectation.rb', line 55 def self.autocorrect_incompatible_with [Style::TrailingCommaInArguments] end |
Instance Method Details
#as_is_matcher(node) ⇒ Object
Supported matchers: eq(…) / match(/regexp/) / match('regexp')
42 43 44 45 46 |
# File 'lib/rubocop/cop/rspec/capybara/current_path_expectation.rb', line 42 def_node_matcher :as_is_matcher, <<-PATTERN (send #expectation_set_on_current_path $#Runners.all ${(send nil? :eq ...) (send nil? :match (regexp ...))}) PATTERN |
#expectation_set_on_current_path(node) ⇒ Object
36 37 38 |
# File 'lib/rubocop/cop/rspec/capybara/current_path_expectation.rb', line 36 def_node_matcher :expectation_set_on_current_path, <<-PATTERN (send nil? :expect (send {(send nil? :page) nil?} :current_path)) PATTERN |
#on_send(node) ⇒ Object
59 60 61 62 63 64 65 66 67 |
# File 'lib/rubocop/cop/rspec/capybara/current_path_expectation.rb', line 59 def on_send(node) expectation_set_on_current_path(node) do add_offense(node.loc.selector) do |corrector| next unless node.chained? autocorrect(corrector, node) end end end |
#regexp_str_matcher(node) ⇒ Object
49 50 51 52 53 |
# File 'lib/rubocop/cop/rspec/capybara/current_path_expectation.rb', line 49 def_node_matcher :regexp_str_matcher, <<-PATTERN (send #expectation_set_on_current_path $#Runners.all $(send nil? :match (str $_))) PATTERN |