class RuboCop::Cop::RSpec::DescribeClass
Check that the first argument to the top-level describe is a constant.
It can be configured to ignore strings when certain metadata is passed.
Ignores Rails
and Aruba `type` metadata by default.
@example `IgnoredMetadata` configuration
# .rubocop.yml # RSpec/DescribeClass: # IgnoredMetadata: # type: # - request # - controller
@example
# bad describe 'Do something' do end # good describe TestedClass do subject { described_class } end describe 'TestedClass::VERSION' do subject { Object.const_get(self.class.description) } end describe "A feature example", type: :feature do end
Constants
- MSG
Public Instance Methods
on_top_level_group(node)
click to toggle source
# File lib/rubocop/cop/rspec/describe_class.rb, line 58 def on_top_level_group(node) return if example_group_with_ignored_metadata?(node.send_node) not_a_const_described(node.send_node) do |described| add_offense(described) end end
Private Instance Methods
ignored_metadata()
click to toggle source
# File lib/rubocop/cop/rspec/describe_class.rb, line 79 def ignored_metadata cop_config['IgnoredMetadata'] || {} end
ignored_metadata?(node)
click to toggle source
# File lib/rubocop/cop/rspec/describe_class.rb, line 68 def ignored_metadata?(node) sym_pair(node) do |key, value| ignored_metadata[key.value.to_s].to_a.include?(value.value.to_s) end end
string_constant?(described)
click to toggle source
# File lib/rubocop/cop/rspec/describe_class.rb, line 74 def string_constant?(described) described.str_type? && described.value.match?(/^(?:(?:::)?[A-Z]\w*)+$/) end