Class: RuboCop::Cop::RSpec::ExampleLength

Inherits:
Base
  • Object
show all
Includes:
CodeLength
Defined in:
lib/rubocop/cop/rspec/example_length.rb

Overview

Checks for long examples.

A long example is usually more difficult to understand. Consider extracting out some behavior, e.g. with a ‘let` block, or a helper method.

You can set constructs you want to fold with ‘CountAsOne`. Available are: ’array’, ‘hash’, ‘heredoc’, and ‘method_call’. Each construct will be counted as one line regardless of its actual size.

Examples:

# bad
it do
  service = described_class.new
  more_setup
  more_setup
  result = service.call
  expect(result).to be(true)
end

# good
it do
  service = described_class.new
  result = service.call
  expect(result).to be(true)
end

CountAsOne: [‘array’, ‘heredoc’, ‘method_call’]


it do
  array = [         # +1
    1,
    2
  ]

  hash = {          # +3
    key: 'value'
  }

  msg = <<~HEREDOC  # +1
    Heredoc
    content.
  HEREDOC

  foo(            # +1
    1,
    2
  )
end               # 6 points

Constant Summary collapse

LABEL =
'Example'

Instance Method Summary collapse

Methods inherited from Base

inherited, #on_new_investigation

Methods included from RSpec::Language::NodePattern

#block_or_numblock_pattern, #block_pattern, #numblock_pattern, #send_pattern

Methods included from RSpec::Language

#example?, #example_group?, #example_group_with_body?, #explicit_rspec?, #hook?, #include?, #let?, #rspec?, #shared_group?, #spec_group?, #subject?

Instance Method Details

#on_block(node) ⇒ Object

rubocop:disable InternalAffairs/NumblockHandler



62
63
64
65
66
# File 'lib/rubocop/cop/rspec/example_length.rb', line 62

def on_block(node) # rubocop:disable InternalAffairs/NumblockHandler
  return unless example?(node)

  check_code_length(node)
end