Minitest

Minitest/AssertEmpty

默认启用 安全 支持自动更正 添加版本 更改版本

启用

始终

0.2

-

强制测试使用 assert_empty 而不是使用 assert(object.empty?)

示例

# bad
assert(object.empty?)
assert(object.empty?, 'message')

# good
assert_empty(object)
assert_empty(object, 'message')

Minitest/AssertEmptyLiteral

默认启用 安全 支持自动更正 添加版本 更改版本

启用

始终

0.5

0.11

强制测试使用assert_empty,而不是使用assert_equal([], object)assert_equal({}, object)

示例

# bad
assert_equal([], object)
assert_equal({}, object)

# good
assert_empty(object)

Minitest/AssertEqual

默认启用 安全 支持自动更正 添加版本 更改版本

启用

始终

0.4

-

强制使用assert_equal(expected, actual)而不是assert(expected == actual)

示例

# bad
assert("rubocop-minitest" == actual)
assert_operator("rubocop-minitest", :==, actual)

# good
assert_equal("rubocop-minitest", actual)

Minitest/AssertInDelta

默认启用 安全 支持自动更正 添加版本 更改版本

待定

始终

0.10

-

强制测试使用assert_in_delta而不是使用assert_equal来比较浮点数。

示例

# bad
assert_equal(0.2, actual)
assert_equal(0.2, actual, 'message')

# good
assert_in_delta(0.2, actual)
assert_in_delta(0.2, actual, 0.001, 'message')

Minitest/AssertIncludes

默认启用 安全 支持自动更正 添加版本 更改版本

启用

始终

0.2

-

强制测试使用assert_includes而不是使用assert(collection.include?(object))

示例

# bad
assert(collection.include?(object))
assert(collection.include?(object), 'message')

# good
assert_includes(collection, object)
assert_includes(collection, object, 'message')

Minitest/AssertInstanceOf

默认启用 安全 支持自动更正 添加版本 更改版本

启用

始终

0.4

-

强制测试使用assert_instance_of(Class, object)而不是assert(object.instance_of?(Class))

示例

# bad
assert(object.instance_of?(Class))
assert(object.instance_of?(Class), 'message')

# bad
assert_equal(Class, object.class)
assert_equal(Class, object.class, 'message')

# good
assert_instance_of(Class, object)
assert_instance_of(Class, object, 'message')

Minitest/AssertKindOf

默认启用 安全 支持自动更正 添加版本 更改版本

待定

始终

0.10

0.34

强制测试使用assert_kind_of(Class, object)而不是assert(object.kind_of?(Class))

示例

# bad
assert(object.kind_of?(Class))
assert(object.kind_of?(Class), 'message')

# bad
# `is_a?` is an alias for `kind_of?`
assert(object.is_a?(Class))
assert(object.is_a?(Class), 'message')

# good
assert_kind_of(Class, object)
assert_kind_of(Class, object, 'message')

Minitest/AssertMatch

默认启用 安全 支持自动更正 添加版本 更改版本

启用

始终

0.6

-

强制测试使用assert_match而不是使用assert(matcher.match(string))

示例

# bad
assert(matcher.match(string))
assert(matcher.match?(string))
assert(matcher =~ string)
assert_operator(matcher, :=~, string)
assert(matcher.match(string), 'message')

# good
assert_match(regex, string)
assert_match(matcher, string, 'message')

Minitest/AssertNil

默认启用 安全 支持自动更正 添加版本 更改版本

启用

始终

0.1

-

强制测试使用assert_nil而不是使用assert_equal(nil, something)assert(something.nil?)assert_predicate(something, :nil?)

示例

# bad
assert_equal(nil, actual)
assert_equal(nil, actual, 'message')
assert(object.nil?)
assert(object.nil?, 'message')
assert_predicate(object, :nil?)
assert_predicate(object, :nil?, 'message')

# good
assert_nil(actual)
assert_nil(actual, 'message')

Minitest/AssertOperator

默认启用 安全 支持自动更正 添加版本 更改版本

待定

始终

0.32

-

强制使用 assert_operator(expected, :<, actual) 代替 assert(expected < actual)

示例

# bad
assert(expected < actual)

# good
assert_operator(expected, :<, actual)

Minitest/AssertOutput

默认启用 安全 支持自动更正 添加版本 更改版本

待定

0.10

-

检查是否有机会使用 assert_output

示例

# bad
$stdout = StringIO.new
puts object.method
$stdout.rewind
assert_match expected, $stdout.read

# good
assert_output(expected) { puts object.method }

Minitest/AssertPathExists

默认启用 安全 支持自动更正 添加版本 更改版本

待定

始终

0.10

-

强制测试使用 assert_path_exists 代替 assert(File.exist?(path))

示例

# bad
assert(File.exist?(path))
assert(File.exist?(path), 'message')

# good
assert_path_exists(path)
assert_path_exists(path, 'message')

Minitest/AssertPredicate

默认启用 安全 支持自动更正 添加版本 更改版本

待定

始终

0.18

-

强制测试使用 assert_predicate 代替 assert(obj.a_predicate_method?)

示例

# bad
assert(obj.one?)
assert(obj.one?, 'message')

# good
assert_predicate(obj, :one?)
assert_predicate(obj, :one?, 'message')

Minitest/AssertRaisesCompoundBody

默认启用 安全 支持自动更正 添加版本 更改版本

待定

0.21

-

强制 assert_raises { …​ } 的块体代码缩减为仅包含抛出代码。

示例

# bad
assert_raises(MyError) do
  foo
  bar
end

# good
assert_raises(MyError) do
  foo
end

# good
assert_raises(MyError) do
  foo do
    bar
    baz
  end
end

Minitest/AssertRaisesWithRegexpArgument

默认启用 安全 支持自动更正 添加版本 更改版本

待定

0.22

0.26

检查 assert_raises 是否使用正则表达式字面量作为参数。参数应为异常类。可选地,最后一个参数可以是自定义消息字符串,以帮助解释失败。无论哪种方式,它都不是 exception.message 进行比较的参数。抛出的异常将被返回,可用于与正则表达式匹配。

示例

# bad
assert_raises FooError, /some message/ do
  obj.occur_error
end

# good
exception = assert_raises FooError do
  obj.occur_error
end
assert_match(/some message/, exception.message)

可配置属性

名称 默认值 可配置值

严重性

警告

字符串

Minitest/AssertRespondTo

默认启用 安全 支持自动更正 添加版本 更改版本

启用

始终

0.3

-

强制使用 assert_respond_to(object, :do_something) 代替 assert(object.respond_to?(:do_something))

示例

# bad
assert(object.respond_to?(:do_something))
assert(object.respond_to?(:do_something), 'message')
assert(respond_to?(:do_something))

# good
assert_respond_to(object, :do_something)
assert_respond_to(object, :do_something, 'message')
assert_respond_to(self, :do_something)

Minitest/AssertSame

默认启用 安全 支持自动更正 添加版本 更改版本

待定

始终

0.26

-

强制使用 assert_same(expected, actual) 代替 assert(expected.equal?(actual))

仅在需要按身份比较时使用 assert_same。否则,使用 assert_equal

示例

# bad
assert(expected.equal?(actual))
assert_equal(expected.object_id, actual.object_id)

# good
assert_same(expected, actual)

Minitest/AssertSilent

默认启用 安全 支持自动更正 添加版本 更改版本

待定

始终

0.10

-

强制测试使用assert_silent { …​ }而不是使用assert_output('', '') { …​ }

示例

# bad
assert_output('', '') { puts object.do_something }

# good
assert_silent { puts object.do_something }

Minitest/AssertTruthy

默认启用 安全 支持自动更正 添加版本 更改版本

启用

始终(不安全)

0.2

0.27

强制测试使用assert(actual)而不是使用assert_equal(true, actual)

安全

此 cop 不安全,因为可能需要 true 而不是 truthy。当这是一个变量或方法返回值时,无法防止误报。

assert_equal(true, 'truthy') # failure
assert('truthy')             # success

示例

# bad
assert_equal(true, actual)
assert_equal(true, actual, 'message')

# good
assert(actual)
assert(actual, 'message')

Minitest/AssertWithExpectedArgument

默认启用 安全 支持自动更正 添加版本 更改版本

待定

0.11

0.26

尝试检测用户何时意外使用assert,而他们本应使用assert_equal

assert 方法的第二个参数名为messagemsg 是允许的。因为它们的名称被推断为消息参数。

安全

此 cop 不安全,因为无法确定assert 的第二个参数是否为消息。

示例

# bad
assert(3, my_list.length)
assert(expected, actual)

# good
assert_equal(3, my_list.length)
assert_equal(expected, actual)
assert(foo, 'message')
assert(foo, message)
assert(foo, msg)

可配置属性

名称 默认值 可配置值

严重性

警告

字符串

Minitest/AssertionInLifecycleHook

默认启用 安全 支持自动更正 添加版本 更改版本

待定

0.10

-

检查生命周期钩子中断言的使用情况。

示例

# bad
class FooTest < Minitest::Test
  def setup
    assert_equal(foo, bar)
  end
end

# good
class FooTest < Minitest::Test
  def test_something
    assert_equal(foo, bar)
  end
end

Minitest/DuplicateTestRun

默认启用 安全 支持自动更正 添加版本 更改版本

待定

0.19

-

如果 Minitest 类从另一个类继承,它也会继承其方法,导致 Minitest 运行父类的测试方法两次。

此 cop 检测到是否有两个测试类,一个从另一个继承,并且两者都有测试方法。在这种情况下,此 cop 将在子类中添加一个违规。

示例

# bad
class ParentTest < Minitest::Test
  def test_parent # it will run this test twice.
  end
end

class ChildTest < ParentTest
  def test_child
  end
end

# good
class ParentTest < Minitest::Test
  def test_parent
  end
end

class ChildTest < Minitest::Test
  def test_child
  end
end

# good
class ParentTest < Minitest::Test
end

class ChildTest
  def test_child
  end

  def test_parent
  end
end

Minitest/EmptyLineBeforeAssertionMethods

默认启用 安全 支持自动更正 添加版本 更改版本

待定

始终

0.23

-

强制在断言方法之前使用空行,因为它会将断言阶段分开。

示例

# bad
do_something
assert_equal(expected, actual)

# good
do_something

assert_equal(expected, actual)

Minitest/Focus

默认启用 安全 支持自动更正 添加版本 更改版本

待定

仅限命令行

0.35

-

强制测试不集中。

示例

# bad
focus test 'foo' do
end

# bad
focus
test 'foo' do
end

# good
test 'foo' do
end

Minitest/GlobalExpectations

默认启用 安全 支持自动更正 添加版本 更改版本

启用

始终

0.7

0.26

检查已弃用的全局期望并将其自动更正为使用期望格式。

示例

EnforcedStyle: any(默认)

# bad
musts.must_equal expected_musts
wonts.wont_match expected_wonts
musts.must_raise TypeError

# good
_(musts).must_equal expected_musts
_(wonts).wont_match expected_wonts
_ { musts }.must_raise TypeError

expect(musts).must_equal expected_musts
expect(wonts).wont_match expected_wonts
expect { musts }.must_raise TypeError

value(musts).must_equal expected_musts
value(wonts).wont_match expected_wonts
value { musts }.must_raise TypeError

EnforcedStyle: _

# bad
musts.must_equal expected_musts
wonts.wont_match expected_wonts
musts.must_raise TypeError

expect(musts).must_equal expected_musts
expect(wonts).wont_match expected_wonts
expect { musts }.must_raise TypeError

value(musts).must_equal expected_musts
value(wonts).wont_match expected_wonts
value { musts }.must_raise TypeError

# good
_(musts).must_equal expected_musts
_(wonts).wont_match expected_wonts
_ { musts }.must_raise TypeError

EnforcedStyle: expect

# bad
musts.must_equal expected_musts
wonts.wont_match expected_wonts
musts.must_raise TypeError

_(musts).must_equal expected_musts
_(wonts).wont_match expected_wonts
_ { musts }.must_raise TypeError

value(musts).must_equal expected_musts
value(wonts).wont_match expected_wonts
value { musts }.must_raise TypeError

# good
expect(musts).must_equal expected_musts
expect(wonts).wont_match expected_wonts
expect { musts }.must_raise TypeError

EnforcedStyle: value

# bad
musts.must_equal expected_musts
wonts.wont_match expected_wonts
musts.must_raise TypeError

_(musts).must_equal expected_musts
_(wonts).wont_match expected_wonts
_ { musts }.must_raise TypeError

expect(musts).must_equal expected_musts
expect(wonts).wont_match expected_wonts
expect { musts }.must_raise TypeError

# good
value(musts).must_equal expected_musts
value(wonts).wont_match expected_wonts
value { musts }.must_raise TypeError

可配置属性

名称 默认值 可配置值

严重性

警告

字符串

EnforcedStyle

any

_, any, expect, value

包含

**/test/**/*, **/*_test.rb, **/spec/**/*, **/*_spec.rb

数组

Minitest/LifecycleHooksOrder

默认启用 安全 支持自动更正 添加版本 更改版本

待定

始终

0.28

-

检查生命周期钩子是否按执行顺序声明。

示例

# bad
class FooTest < Minitest::Test
  def teardown; end
  def setup; end
end

# good
class FooTest < Minitest::Test
  def setup; end
  def teardown; end
end

# bad (after test cases)
class FooTest < Minitest::Test
  def test_something
    assert foo
  end
  def setup; end
  def teardown; end
end

# good
class FooTest < Minitest::Test
  def setup; end
  def teardown; end
  def test_something
    assert foo
  end
end

# good (after non test case methods)
class FooTest < Minitest::Test
  def do_something; end
  def setup; end
  def teardown; end
end

Minitest/LiteralAsActualArgument

默认启用 安全 支持自动更正 添加版本 更改版本

待定

始终

0.10

-

强制 assert_equal 中预期参数和实际参数的正确顺序。

示例

# bad
assert_equal foo, 2
assert_equal foo, [1, 2]
assert_equal foo, [1, 2], 'message'

# good
assert_equal 2, foo
assert_equal [1, 2], foo
assert_equal [1, 2], foo, 'message'

Minitest/MultipleAssertions

默认启用 安全 支持自动更正 添加版本 更改版本

待定

0.10

-

检查测试用例是否包含太多断言调用。如果使用包含断言的条件代码,则计算断言最多的分支。允许的最大断言调用次数是可配置的。

示例

最大值:1

# bad
class FooTest < Minitest::Test
  def test_asserts_twice
    assert_equal(42, do_something)
    assert_empty(array)
  end
end

# good
class FooTest < Minitest::Test
  def test_asserts_once
    assert_equal(42, do_something)
  end

  def test_another_asserts_once
    assert_empty(array)
  end
end

可配置属性

名称 默认值 可配置值

最大值

3

整数

Minitest/NoAssertions

默认启用 安全 支持自动更正 添加版本 更改版本

已禁用

0.12

-

检查测试用例是否包含任何断言调用。

示例

# bad
class FooTest < Minitest::Test
  def test_the_truth
  end
end

# good
class FooTest < Minitest::Test
  def test_the_truth
    assert true
  end
end

Minitest/NoTestCases

默认启用 安全 支持自动更正 添加版本 更改版本

已禁用

0.30

-

检查测试类是否包含任何测试用例。

示例

# bad
class FooTest < Minitest::Test
  def do_something
  end
end

# good
class FooTest < Minitest::Test
  def test_something
    assert true
  end
end

Minitest/NonExecutableTestMethod

默认启用 安全 支持自动更正 添加版本 更改版本

待定

0.34

-

检查测试类之外是否使用测试方法。

测试方法应在测试类中定义,以确保其执行。

此 cop 假设超类名称包含“Test”的类是测试类,以防止误报。

示例

# bad
class FooTest < Minitest::Test
end
def test_method_should_be_inside_test_class
end

# good
class FooTest < Minitest::Test
  def test_method_should_be_inside_test_class
  end
end

可配置属性

名称 默认值 可配置值

严重性

警告

字符串

Minitest/NonPublicTestMethod

默认启用 安全 支持自动更正 添加版本 更改版本

待定

0.27

-

检测非 public(标记为 privateprotected)测试方法。Minitest 仅运行 public 的测试方法。

示例

# bad
class FooTest
  private # or protected
  def test_does_something
    assert_equal 42, do_something
  end
end

# good
class FooTest
  def test_does_something
    assert_equal 42, do_something
  end
end

# good (not a test case name)
class FooTest
  private # or protected
  def does_something
    assert_equal 42, do_something
  end
end

# good (no assertions)
class FooTest
  private # or protected
  def test_does_something
    do_something
  end
end

可配置属性

名称 默认值 可配置值

严重性

警告

字符串

Minitest/RedundantMessageArgument

默认启用 安全 支持自动更正 添加版本 更改版本

待定

始终

0.34

-

检测断言方法中冗余的消息参数。消息参数 nil 是冗余的,因为它是默认值。

示例

# bad
assert_equal(expected, actual, nil)

# good
assert_equal(expected, actual)
assert_equal(expected, actual, 'message')

Minitest/RefuteEmpty

默认启用 安全 支持自动更正 添加版本 更改版本

启用

始终

0.3

-

强制使用 refute_empty 而不是使用 refute(object.empty?)

示例

# bad
refute(object.empty?)
refute(object.empty?, 'message')

# good
refute_empty(object)
refute_empty(object, 'message')

Minitest/RefuteEqual

默认启用 安全 支持自动更正 添加版本 更改版本

启用

始终

0.3

-

强制使用 refute_equal(expected, object) 而不是使用 assert(expected != actual)assert(! expected == actual)

示例

# bad
assert("rubocop-minitest" != actual)
refute("rubocop-minitest" == actual)
assert_operator("rubocop-minitest", :!=, actual)
refute_operator("rubocop-minitest", :==, actual)

# good
refute_equal("rubocop-minitest", actual)

Minitest/RefuteFalse

默认启用 安全 支持自动更正 添加版本 更改版本

启用

始终(不安全)

0.3

0.27

强制使用 refute(object) 而不是使用 assert_equal(false, object)

安全

此规则不安全,因为它无法检测到第二个参数为 nil 时的失败。当这是一个变量或方法返回值时,无法防止误报。

assert_equal(false, nil) # failure
refute(nil)              # success

示例

# bad
assert_equal(false, actual)
assert_equal(false, actual, 'message')

assert(!test)
assert(!test, 'message')

# good
refute(actual)
refute(actual, 'message')

Minitest/RefuteInDelta

默认启用 安全 支持自动更正 添加版本 更改版本

待定

始终

0.10

-

强制测试使用 refute_in_delta 而不是使用 refute_equal 来比较浮点数。

示例

# bad
refute_equal(0.2, actual)
refute_equal(0.2, actual, 'message')

# good
refute_in_delta(0.2, actual)
refute_in_delta(0.2, actual, 0.001, 'message')

Minitest/RefuteIncludes

默认启用 安全 支持自动更正 添加版本 更改版本

启用

始终

0.3

-

强制测试使用 refute_includes 而不是使用 refute(collection.include?(object))

示例

# bad
refute(collection.include?(object))
refute(collection.include?(object), 'message')

# good
refute_includes(collection, object)
refute_includes(collection, object, 'message')

Minitest/RefuteInstanceOf

默认启用 安全 支持自动更正 添加版本 更改版本

启用

始终

0.4

-

强制使用 refute_instance_of(Class, object) 而不是使用 refute(object.instance_of?(Class))

示例

# bad
refute(object.instance_of?(Class))
refute(object.instance_of?(Class), 'message')

# bad
refute_equal(Class, object.class)
refute_equal(Class, object.class, 'message')

# good
refute_instance_of(Class, object)
refute_instance_of(Class, object, 'message')

Minitest/RefuteKindOf

默认启用 安全 支持自动更正 添加版本 更改版本

待定

始终

0.10

0.34

强制使用 refute_kind_of(Class, object) 而不是使用 refute(object.kind_of?(Class))

示例

# bad
refute(object.kind_of?(Class))
refute(object.kind_of?(Class), 'message')

# bad
# `is_a?` is an alias for `kind_of?`
refute(object.is_of?(Class))
refute(object.is_of?(Class), 'message')

# good
refute_kind_of(Class, object)
refute_kind_of(Class, object, 'message')

Minitest/RefuteMatch

默认启用 安全 支持自动更正 添加版本 更改版本

启用

始终

0.6

-

强制测试使用 refute_match 而不是使用 refute(matcher.match(string))

示例

# bad
refute(matcher.match(string))
refute(matcher.match?(string))
refute(matcher =~ string)
refute_operator(matcher, :=~, string)
assert_operator(matcher, :!~, string)
refute(matcher.match(string), 'message')

# good
refute_match(matcher, string)
refute_match(matcher, string, 'message')

Minitest/RefuteNil

默认启用 安全 支持自动更正 添加版本 更改版本

启用

始终

0.2

-

强制测试使用 refute_nil 而不是使用 refute_equal(nil, something)refute(something.nil?)refute_predicate(something, :nil?)

示例

# bad
refute_equal(nil, actual)
refute_equal(nil, actual, 'message')
refute(actual.nil?)
refute(actual.nil?, 'message')
refute_predicate(object, :nil?)
refute_predicate(object, :nil?, 'message')

# good
refute_nil(actual)
refute_nil(actual, 'message')

Minitest/RefuteOperator

默认启用 安全 支持自动更正 添加版本 更改版本

待定

始终

0.32

-

强制使用 refute_operator(expected, :<, actual) 而不是 refute(expected < actual)

示例

# bad
refute(expected < actual)

# good
refute_operator(expected, :<, actual)

Minitest/RefutePathExists

默认启用 安全 支持自动更正 添加版本 更改版本

待定

始终

0.10

-

强制测试使用 refute_path_exists 而不是使用 refute(File.exist?(path))

示例

# bad
refute(File.exist?(path))
refute(File.exist?(path), 'message')

# good
refute_path_exists(path)
refute_path_exists(path, 'message')

Minitest/RefutePredicate

默认启用 安全 支持自动更正 添加版本 更改版本

待定

始终

0.18

-

强制测试使用 refute_predicate 而不是使用 refute(obj.a_predicate_method?)

示例

# bad
refute(obj.one?)
refute(obj.one?, 'message')

# good
refute_predicate(obj, :one?)
refute_predicate(obj, :one?, 'message')

Minitest/RefuteRespondTo

默认启用 安全 支持自动更正 添加版本 更改版本

启用

始终

0.4

-

强制测试使用 refute_respond_to(object, :do_something) 而不是 refute(object.respond_to?(:do_something))

示例

# bad
refute(object.respond_to?(:do_something))
refute(object.respond_to?(:do_something), 'message')
refute(respond_to?(:do_something))

# good
refute_respond_to(object, :do_something)
refute_respond_to(object, :do_something, 'message')
refute_respond_to(self, :do_something)

Minitest/RefuteSame

默认启用 安全 支持自动更正 添加版本 更改版本

待定

始终

0.26

-

强制使用 refute_same(expected, object) 而不是 refute(expected.equal?(actual))

仅当需要按身份比较时才使用 refute_same。否则,使用 refute_equal

示例

# bad
refute(expected.equal?(actual))
refute_equal(expected.object_id, actual.object_id)

# good
refute_same(expected, actual)

Minitest/ReturnInTestMethod

默认启用 安全 支持自动更正 添加版本 更改版本

待定

始终

0.31

-

强制在测试方法中使用 skip 而不是 return

示例

# bad
def test_something
  return if condition?
  assert_equal(42, something)
end

# good
def test_something
  skip if condition?
  assert_equal(42, something)
end

Minitest/SkipEnsure

默认启用 安全 支持自动更正 添加版本 更改版本

待定

0.20

0.26

检查即使 skip 也调用 ensure。在跳过测试时调用 ensure 是不可预期的。如果使用条件 skip,则检查 ensure 也按条件调用。

另一方面,它接受在 rescue 中使用的 skip,因为 ensure 可能是 begin 设置过程的拆卸过程。

示例

# 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

可配置属性

名称 默认值 可配置值

严重性

警告

字符串

Minitest/SkipWithoutReason

默认启用 安全 支持自动更正 添加版本 更改版本

待定

0.24

-

检查跳过的测试是否缺少跳过原因。

示例

# bad
skip
skip('')

# bad
if condition?
  skip
else
  skip
end

# good
skip("Reason why the test was skipped")

# good
skip if condition?

Minitest/TestFileName

默认启用 安全 支持自动更正 添加版本 更改版本

待定

0.26

-

检查测试文件名是否以test_开头或以_test.rb结尾。检查定义以Test结尾的类的文件。不遵循此约定可能会导致测试无法运行。

示例

# bad
my_class.rb

# good
my_class_test.rb
test_my_class.rb

Minitest/TestMethodName

默认启用 安全 支持自动更正 添加版本 更改版本

待定

始终

0.10

-

强制测试方法名以test_前缀开头。它旨在防止忘记以test_开头测试方法名的测试无法执行。

示例

# bad
class FooTest < Minitest::Test
  def does_something
    assert_equal 42, do_something
  end
end

# good
class FooTest < Minitest::Test
  def test_does_something
    assert_equal 42, do_something
  end
end

# good
class FooTest < Minitest::Test
  def helper_method(argument)
  end
end

Minitest/UnreachableAssertion

默认启用 安全 支持自动更正 添加版本 更改版本

待定

0.14

0.26

检查assert_raises在块底部是否有断言方法,因为断言将永远无法到达。

示例

# 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)

可配置属性

名称 默认值 可配置值

严重性

警告

字符串

Minitest/UnspecifiedException

默认启用 安全 支持自动更正 添加版本 更改版本

待定

0.10

-

检查assert_raises中是否指定了错误。

示例

# bad
assert_raises { raise FooException }
assert_raises('This should have raised') { raise FooException }

# good
assert_raises(FooException) { raise FooException }
assert_raises(FooException, 'This should have raised') { raise FooException }

Minitest/UselessAssertion

默认启用 安全 支持自动更正 添加版本 更改版本

待定

0.26

-

检测无用的断言(始终通过或始终失败的断言)。

示例

# bad
assert true
assert_equal @foo, @foo
assert_nil [foo, bar]

# good
assert something
assert_equal foo, bar
assert_nil foo
assert false, "My message"