class RuboCop::Cop::RSpec::ExampleLength

Checks for long examples.

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

@example

# 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

Constants

MSG

Public Instance Methods

on_block(node) click to toggle source
# File lib/rubocop/cop/rspec/example_length.rb, line 33
def on_block(node)
  return unless example?(node)

  length = code_length(node)

  return unless length > max_length

  add_offense(node, location: :expression, message: message(length))
end

Private Instance Methods

code_length(node) click to toggle source
# File lib/rubocop/cop/rspec/example_length.rb, line 45
def code_length(node)
  node.source.lines[1..-2].count { |line| !irrelevant_line(line) }
end
message(length) click to toggle source
# File lib/rubocop/cop/rspec/example_length.rb, line 49
def message(length)
  format(MSG, total: length, max: max_length)
end