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 Mar 13, 2023
1 parent 6e875c4 commit 543c5fe
Show file tree
Hide file tree
Showing 5 changed files with 90 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 @@ -187,6 +187,11 @@ Minitest/NonPublicTestMethod:
Severity: warning
VersionAdded: '0.27'

Minitest/NoTestCases:
Description: 'Checks if test class contains any test cases.'
Enabled: false
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 should have 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 @@ -35,6 +35,7 @@
require_relative 'minitest/multiple_assertions'
require_relative 'minitest/no_assertions'
require_relative 'minitest/non_public_test_method'
require_relative 'minitest/no_test_cases'
require_relative 'minitest/refute_empty'
require_relative 'minitest/refute_false'
require_relative 'minitest/refute_equal'
Expand Down
48 changes: 48 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,48 @@
# 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 should have 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 should have 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_considers_active_support_test_example_format
assert_no_offenses(<<~RUBY)
class FooTest < Minitest::Test
test 'something' do; 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 543c5fe

Please sign in to comment.