Class: RuboCop::Cop::Minitest::SkipEnsure

Inherits:
Base
  • Object
show all
Defined in:
lib/rubocop/cop/minitest/skip_ensure.rb

Overview

Checks that ‘ensure` call even if `skip`. It is unexpected that `ensure` will be called when skipping test. If conditional `skip` is used, it checks that `ensure` is also called conditionally.

On the other hand, it accepts ‘skip` used in `rescue` because `ensure` may be teardown process to `begin` setup process.

Examples:


# bad
def test_skip
  skip 'This test is skipped.'

  assert 'foo'.present?
ensure
  do_something
end

# bad
def test_conditional_skip
  skip 'This test is skipped.' if condition

  assert do_something
ensure
  do_teardown
end

# good
def test_skip
  skip 'This test is skipped.'

  begin
    assert 'foo'.present?
  ensure
    do_something
  end
end

# good
def test_conditional_skip
  skip 'This test is skipped.' if condition

  assert do_something
ensure
  if condition
    do_teardown
  end
end

# good
def test_skip_is_used_in_rescue
  do_setup
  assert do_something
rescue
  skip 'This test is skipped.'
ensure
  do_teardown
end

Constant Summary collapse

MSG =
'`ensure` is called even though the test is skipped.'

Instance Method Summary collapse

Instance Method Details

#on_ensure(node) ⇒ Object



67
68
69
70
71
72
73
# File 'lib/rubocop/cop/minitest/skip_ensure.rb', line 67

def on_ensure(node)
  skip = find_skip(node)

  return if skip.nil? || use_skip_in_rescue?(skip) || valid_conditional_skip?(skip, node)

  add_offense(node.loc.keyword)
end