Class: RuboCop::Cop::RSpec::Capybara::FeatureMethods
- Extended by:
- AutoCorrector
- Includes:
- InsideExampleGroup
- Defined in:
- lib/rubocop/cop/rspec/capybara/feature_methods.rb
Overview
Checks for consistent method usage in feature specs.
By default, the cop disables all Capybara-specific methods that have the same native RSpec method (e.g. are just aliases). Some teams however may prefer using some of the Capybara methods (like ‘feature`) to make it obvious that the test uses Capybara, while still disable the rest of the methods, like `given` (alias for `let`), `background` (alias for `before`), etc. You can configure which of the methods to be enabled by using the EnabledMethods configuration option.
Constant Summary collapse
- MSG =
'Use `%<replacement>s` instead of `%<method>s`.'
- MAP =
{ background: :before, scenario: :it, xscenario: :xit, given: :let, given!: :let!, feature: :describe }.freeze
Instance Method Summary collapse
- #capybara_speak(node) ⇒ Object
- #feature_method(node) ⇒ Object
- #message(range) ⇒ Object
- #on_block(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?
Instance Method Details
#capybara_speak(node) ⇒ Object
60 61 62 |
# File 'lib/rubocop/cop/rspec/capybara/feature_methods.rb', line 60 def_node_matcher :capybara_speak, <<-PATTERN {#{MAP.keys.map(&:inspect).join(' ')}} PATTERN |
#feature_method(node) ⇒ Object
65 66 67 68 69 |
# File 'lib/rubocop/cop/rspec/capybara/feature_methods.rb', line 65 def_node_matcher :feature_method, <<-PATTERN (block $(send #rspec? $#capybara_speak ...) ...) PATTERN |
#message(range) ⇒ Object
83 84 85 86 |
# File 'lib/rubocop/cop/rspec/capybara/feature_methods.rb', line 83 def (range) name = range.source.to_sym format(MSG, method: name, replacement: MAP[name]) end |
#on_block(node) ⇒ Object
71 72 73 74 75 76 77 78 79 80 81 |
# File 'lib/rubocop/cop/rspec/capybara/feature_methods.rb', line 71 def on_block(node) return unless inside_example_group?(node) feature_method(node) do |send_node, match| next if enabled?(match) add_offense(send_node.loc.selector) do |corrector| corrector.replace(send_node.loc.selector, MAP[match].to_s) end end end |