简体   繁体   中英

Ruby instance_eval confusion with load`

I am trying to test a single method in ruby. It is in a separate file so basically:

a.rb:

def my_method
  ...
end

in my a_spec.rb

require 'minitest/autorun'

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

  def hello_world
    ...
  end
end

When I try to run my test, it says that my_method is a private method while I can actually call Object.hello_world outright. What gives?

Also, is there an easier way to test plain ruby methods(no classes or modules) with minitest?

Doing the load above doesn't add the methods of a.rb as singleton methods to Object. Rather, it adds the methods to the global namespace. (The fact that you are doing the load inside the block where self refers to the Object class is irrelevant.)

With you above code, you should be able to call *my_method* directly in your tests:

class MyTest <  MiniTest::Unit::TestCase

  def test_my_method
    assert my_method
  end

  def test_hello_world
    assert Object.hello_world
  end
end

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

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