【发布时间】:2019-11-13 23:11:36
【问题描述】:
所以我正在尝试测试一个抽象类。根据我阅读的内容,给一个名为Foo的类,我可以在RSpec中做以下事情并且它不会泄漏到其他测试中。
let(:test) do
Class.new(Foo) do
# Do things here
end
end
但是,当我在另一个位置执行Foo.subclasses(取决于规范执行顺序)时,我发现它仍然会泄漏。
我还尝试以正常方式定义类并在后块中将其删除,例如
let(:test) do
class Test < Foo; end
Test
end
...
after do
Object.send(:remove_const, :Test)
end
但这似乎也不起作用。 Foo.subclasses 似乎仍然包含匿名类。
【问题讨论】:
-
不确定是否可以取消声明匿名类。这些垃圾应该最终被收集起来,但可能不会像你希望的那样快。请记住,删除变量或常量不会自动删除关联的对象。这些可能由于其他原因而持续存在,例如它们是否作为子类列表中的参考而保留。
标签: ruby-on-rails ruby rspec rspec-rails activesupport