如何在Ruby中从内存中完全删除类?
我有两个我正在使用的文件:
# foo.rb
require 'expensive_library'
class Foo < ExpensiveLibrary::Plugin
...
end
Run Code Online (Sandbox Code Playgroud)
和:
# foo_tests.rb
require 'foo'
require 'test/unit'
class foo_tests < Test::Unit::TestCase
def test_foo_meets_spec_1
...
end
def test_foo_meets_deprecated_spec
...
end
end
Run Code Online (Sandbox Code Playgroud)
昂贵的图书馆很贵; 加载需要15秒以上.这在开发过程中反复运行测试的时间太长(测试套件的其余部分不到1秒).
我通过启动Pry并编写一个加载两个文件和调用的函数来解决昂贵库的加载时间问题Test::Unit:Autorunner.run.在第一次测试中,这仍然有15秒的暂停,但后续测试运行每次不到1秒.
但是,有两个问题:
根据其他Stack Overflow问题(如" 如何在Ruby中取消定义类? "),我试过调用Object.constants.remove(:Foo)和Object.constants.remove(:Foo_tests).我不再获得方法重新定义的错误,但现在自动运行器多次运行测试,包括删除测试.
我想要的是在不重新加载ExpensiveLibrary的情况下运行修改过的测试.取消定义测试类是我看到的方式,但我不知道如何.其他解决方案可能更好.