在我们的许多类中,我们缓存了昂贵的性能操作.例如
def self.foo
@foo ||= get_foo
end
Run Code Online (Sandbox Code Playgroud)
这在应用程序中很有用,但是由于这些记忆变量,测试(RSpec)失败了.当我们期望新值时,第一次测试的值将在后续测试中返回.
所以问题是:我如何重新加载课程?或者删除所有已记忆的变量?
向示例组添加after
(或before
)块以删除实例变量(假设有问题的对象是主题):
after do
subject.instance_variable_set(:@foo, nil)
end
Run Code Online (Sandbox Code Playgroud)
或者解决问题.拥有一个memoized类实例变量有点气味,因为它永远不会改变.由于您要为每个测试创建一个新对象,因此普通实例变量不会出现此问题.