我正在尝试执行以下代码,但它给了我一个未定义的方法错误:
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框架的文档,并没有在那里定义,但我不确定。
答案 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中,nil
和false
是真实的。
更新:因为你想要明确地检查不是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
为我工作。 !!
的意思是“转换为布尔值”(实际上是双重否定)。