繁体   English   中英

Ruby instance_eval与负载混淆

[英]Ruby instance_eval confusion with load`

我正在尝试在红宝石中测试一种方法。 它基本上在一个单独的文件中:

a.rb:

def my_method
  ...
end

在我的a_spec.rb中

require 'minitest/autorun'

Object.instance_eval do
  load("path_to/a.rb")

  def hello_world
    ...
  end
end

当我尝试运行测试时,它说my_method是私有方法,而实际上我可以直接调用Object.hello_world 是什么赋予了?

另外,有没有更简单的方法可以用minitest测试普通的红宝石方法(没有类或模块)?

进行上述加载不会将a.rb的方法作为单例方法添加到Object。 而是将方法添加到全局名称空间。 (事实上​​,您在self指向Object类的块内进行加载是无关紧要的。)

使用上面的代码,您应该可以在测试中直接调用* my_method *:

class MyTest <  MiniTest::Unit::TestCase

  def test_my_method
    assert my_method
  end

  def test_hello_world
    assert Object.hello_world
  end
end

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM