Class: RuboCop::Cop::RSpecParity::PublicMethodHasSpec

Inherits:
Base
  • Object
show all
Includes:
DepartmentConfig, SpecFileFinder
Defined in:
lib/rubocop/cop/rspec_parity/public_method_has_spec.rb

Overview

Checks that each public method in a class has a corresponding spec test.

Examples:

# bad - public method `perform` exists but no describe '#perform' in spec

# good - public method `perform` has describe '#perform' in spec

Constant Summary collapse

MSG =
"Missing spec for public method `%<method_name>s`. " \
"Expected %<expected>s in %<spec_path>s"
EXCLUDED_METHODS =
%w[initialize].freeze
EXCLUDED_HOOK_METHODS =
%w[included extended inherited prepended].freeze
EXCLUDED_PATTERNS =
[/^before_/, /^after_/, /^around_/, /^validate_/, /^autosave_/].freeze
VISIBILITY_METHODS =
{ private: :private, protected: :protected, public: :public }.freeze

Constants included from DepartmentConfig

DepartmentConfig::SHARED_CONFIG_DEFAULTS

Instance Method Summary collapse

Instance Method Details

#on_def(node) ⇒ Object



27
28
29
30
31
32
33
34
# File 'lib/rubocop/cop/rspec_parity/public_method_has_spec.rb', line 27

def on_def(node)
  return unless checkable_method?(node) && public_method?(node)
  return if inside_inner_class?(node)

  instance_method = !inside_eigenclass?(node) && !inside_class_methods_block?(node)
  flexible_prefix = instance_method && module_with_dual_access?(node)
  check_method_has_spec(node, instance_method: instance_method, flexible_prefix: flexible_prefix)
end

#on_defs(node) ⇒ Object



36
37
38
39
40
41
42
# File 'lib/rubocop/cop/rspec_parity/public_method_has_spec.rb', line 36

def on_defs(node)
  return unless checkable_method?(node) && public_class_method?(node)
  return if EXCLUDED_HOOK_METHODS.include?(node.method_name.to_s)
  return if inside_inner_class?(node)

  check_method_has_spec(node, instance_method: false)
end