Skip to content

Commit

Permalink
[Fix rubocop#216] Add new Minitest/NoTestCases cop
Browse files Browse the repository at this point in the history
  • Loading branch information
tejasbubane committed Jan 1, 2023
1 parent bb9fd78 commit c5c5c5d
Show file tree
Hide file tree
Showing 5 changed files with 82 additions and 0 deletions.
1 change: 1 addition & 0 deletions changelog/new_no_test_cases_cop.md
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
* [#216](https://github.com/rubocop/rubocop-minitest/issues/216): Add new `Minitest/NoTestCases` cop. ([@tejasbubane][])
5 changes: 5 additions & 0 deletions config/default.yml
Original file line number Diff line number Diff line change
Expand Up @@ -164,6 +164,11 @@ Minitest/NoAssertions:
Enabled: false
VersionAdded: '0.12'

Minitest/NoTestCases:
Description: 'Checks if test class contains any test cases.'
Enabled: pending
VersionAdded: '<<next>>'

Minitest/RefuteEmpty:
Description: 'This cop enforces to use `refute_empty` instead of using `refute(object.empty?)`.'
StyleGuide: 'https://minitest.rubystyle.guide#refute-empty'
Expand Down
35 changes: 35 additions & 0 deletions lib/rubocop/cop/minitest/no_test_cases.rb
Original file line number Diff line number Diff line change
@@ -0,0 +1,35 @@
# frozen_string_literal: true

module RuboCop
module Cop
module Minitest
# Checks if test class contains any test cases.
#
# @example
# # bad
# class FooTest < Minitest::Test
# def do_something
# end
# end
#
# # good
# class FooTest < Minitest::Test
# def test_something
# assert true
# end
# end
#
class NoTestCases < Base
include MinitestExplorationHelpers

MSG = 'Test class has no test cases.'

def on_class(node)
return unless test_class?(node)

add_offense(node) if test_cases(node).empty?
end
end
end
end
end
1 change: 1 addition & 0 deletions lib/rubocop/cop/minitest_cops.rb
Original file line number Diff line number Diff line change
Expand Up @@ -31,6 +31,7 @@
require_relative 'minitest/literal_as_actual_argument'
require_relative 'minitest/multiple_assertions'
require_relative 'minitest/no_assertions'
require_relative 'minitest/no_test_cases'
require_relative 'minitest/refute_empty'
require_relative 'minitest/refute_false'
require_relative 'minitest/refute_equal'
Expand Down
40 changes: 40 additions & 0 deletions test/rubocop/cop/minitest/no_test_cases_test.rb
Original file line number Diff line number Diff line change
@@ -0,0 +1,40 @@
# frozen_string_literal: true

require 'test_helper'

class NoTestCases < Minitest::Test
def test_registers_offense_for_empty_test_class
assert_offense(<<~RUBY)
class FooTest < Minitest::Test
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ Test class has no test cases.
end
RUBY
end

def test_registers_offense_for_nonempty_test_class_with_no_test_cases
assert_offense(<<~RUBY)
class FooTest < Minitest::Test
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ Test class has no test cases.
def perform
1 + 2
end
end
RUBY
end

def test_does_not_register_offense_when_test_class_has_test_case
assert_no_offenses(<<~RUBY)
class FooTest < Minitest::Test
def test_foo; end
end
RUBY
end

def test_does_not_register_offense_for_non_test_classes
assert_no_offenses(<<~RUBY)
class FooTest
def perform; end
end
RUBY
end
end

0 comments on commit c5c5c5d

Please sign in to comment.