如何重新加载ruby类

时间:2012-07-13 01:47:37

标签: ruby rspec

在我们的许多课程中,我们会为性能缓存昂贵的操作。 e.g。

def self.foo
    @foo ||= get_foo
end 

这在应用程序中很有用,但是由于这些记忆变量,测试(RSpec)失败了。当我们期望新值时,第一次测试的值将在后续测试中返回。

所以问题是:我如何重新加载课程?或者删除所有已记忆的变量?

2 个答案:

答案 0 :(得分:7)

向示例组添加after(或before)块以删除实例变量(假设相关对象是主题):

after do
  subject.instance_variable_set(:@foo, nil)
end

解决问题。拥有一个memoized类实例变量有点气味,因为它永远不会改变。由于您要为每个测试创建一个新对象,因此普通实例变量不会出现此问题。

答案 1 :(得分:3)

以缓存数据保持正确的方式构建类和测试,或者在缓存数据无效时将其删除。考虑添加一个方法来清除缓存并在rspec before块中调用它。