未定义的方法:Minitest中的assert_not_nil

时间:2016-03-12 09:48:38

标签: ruby minitest testunit

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

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框架的文档,并没有在那里定义,但我不确定。

4 个答案:

答案 0 :(得分:4)

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

答案 1 :(得分:2)

Here您可以找到由MiniTest定义的断言列表。

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

在您的具体案例中:

assert result != nil

您还可以传递自定义消息

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

答案 2 :(得分:0)

您可以使用

assert "Yo".humanize

在ruby everthing中,nilfalse是真实的。

更新:因为你想要明确地检查不是nil:

refute_nil "Yo".humanize

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

class String
  def humanize
    false
  end
end

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

答案 3 :(得分:0)

assert !!result为我工作。 !!的意思是“转换为布尔值”(实际上是双重否定)。