Class: RuboCop::Cop::Minitest::UnreachableAssertion

Inherits:
Base
  • Object
show all
Includes:
RuboCop::Cop::MinitestExplorationHelpers
Defined in:
lib/rubocop/cop/minitest/unreachable_assertion.rb

Overview

Checks for ‘assert_raises` has an assertion method at the bottom of block because the assertion will be never reached.

Examples:


# bad
assert_raises FooError do
  obj.occur_error
  assert_equal('foo', obj.bar) # Never asserted.
end

# good
assert_raises FooError do
  obj.occur_error
end
assert_equal('foo', obj.bar)

Constant Summary collapse

MSG =
'Unreachable `%<assertion_method>s` detected.'

Constants included from RuboCop::Cop::MinitestExplorationHelpers

RuboCop::Cop::MinitestExplorationHelpers::ASSERTION_PREFIXES, RuboCop::Cop::MinitestExplorationHelpers::LIFECYCLE_HOOK_METHODS, RuboCop::Cop::MinitestExplorationHelpers::LIFECYCLE_HOOK_METHODS_IN_ORDER

Instance Method Summary collapse

Instance Method Details

#on_block(node) ⇒ Object

rubocop:disable InternalAffairs/NumblockHandler



28
29
30
31
32
33
34
35
36
# File 'lib/rubocop/cop/minitest/unreachable_assertion.rb', line 28

def on_block(node) # rubocop:disable InternalAffairs/NumblockHandler
  return unless node.method?(:assert_raises) && (body = node.body)

  last_node = body.begin_type? ? body.children.last : body
  return unless last_node.send_type?
  return if !assertion_method?(last_node) || !body.begin_type?

  add_offense(last_node, message: format(MSG, assertion_method: last_node.method_name))
end