未定义的方法:Minitest 中的 assert_not_nil

Undefined method: assert_not_nil in Minitest

我正在尝试执行以下代码,但它给我一个未定义的方法错误:

require 'minitest/autorun'
require 'string_extension'

class StringExtensionTest < Minitest::Test
  def test_humanize_returns_nothing
    assert_not_nil "Yo".humanize, "humanize is returning nil."
  end
end

我正在尝试从 Codeschool 的 Rails 课程中执行这段代码,但似乎没有方法 assert_not_nil。我也查看了 MiniTest 框架的文档,那里也没有定义,但我不确定。

您可以使用

assert "Yo".humanize

在 ruby 中,但 nilfalse 是真实的。

更新:因为您想明确检查是否为零:

refute_nil "Yo".humanize

但在您描述的场景中,我实际上会检查 return 值是否符合我的预期。考虑:

class String
  def humanize
    false
  end
end

refute_nil "Yo".humanize
assert_equal "Yo", "Yo".humanize

Here 你可以找到 MiniTest.

定义的断言列表

如您所见,assert_not_nil 未定义。 MiniTest 没有定义很多可能的断言,但也确实可以用最简单的断言来定义任何断言 assert.

在您的具体情况下:

assert result != nil

您还可以传递自定义消息

assert result != nil, "Expected something to not be nil"

assert_not_nil 只是 refute_nil 的别名,但它只是 Rails,不是标准 Minitest 的一部分。更改测试以扩展 ActiveSupport::TestCase 应该可以解决问题:

class StringExtensionTest < ActiveSupport::TestCase
  def test_humanize_returns_nothing
    assert_not_nil "Yo".humanize, "humanize is returning nil."
  end
end

assert !!result 对我有用。 !! 表示“转换为布尔值”(字面意思是双重否定)。