在我们的许多类中,我们缓存昂贵的性能操作。例如如何重新加载红宝石类
def self.foo
@foo ||= get_foo
end
这适用于应用程序,但测试(RSpec)由于这些memoized变量而失败。当我们预计新值时,第一次测试的值将在随后的测试中返回。
所以问题是:如何重新加载类?或者删除所有memoized变量?
在我们的许多类中,我们缓存昂贵的性能操作。例如如何重新加载红宝石类
def self.foo
@foo ||= get_foo
end
这适用于应用程序,但测试(RSpec)由于这些memoized变量而失败。当我们预计新值时,第一次测试的值将在随后的测试中返回。
所以问题是:如何重新加载类?或者删除所有memoized变量?
以缓存数据保持正确的方式构建您的类和测试,或者在无效时删除它们。考虑添加一个方法来清除缓存并在rspec before
块中调用它。
一个after
(或before
)块添加到示例组以除去实例变量(假设所讨论的对象是对象):
after do
subject.instance_variable_set(:@foo, nil)
end
或者解决该问题。拥有memoized类的实例变量有点味道,因为它永远不会改变。普通的实例变量不会有这个问题,因为你会为每个测试创建一个新的对象。
是的,我认为这是最好的方法和更干净的解决方案。谢谢 – Sebastian 2012-07-13 02:46:58