Find centralized, trusted content and collaborate around the technologies you use most.
Teams
Q&A for work
Connect and share knowledge within a single location that is structured and easy to search.
在我们的许多类中,我们缓存昂贵的操作以提高性能。例如
def self.foo @foo ||= get_foo end
这在应用程序中效果很好,但是测试(RSpec)由于这些记忆变量而失败。当我们期望新值时,将在后续测试中返回第一个测试的值。
所以问题是:我如何重新加载课程?或者删除所有记忆变量?
将after(or before) 块添加到示例组以删除实例变量(假设有问题的对象是主题):
after
before
after do subject.instance_variable_set(:@foo, nil) end
或者解决问题。拥有一个记忆化的类实例变量有点味道,因为它永远不会改变。普通实例变量不会有这个问题,因为您会为每个测试创建一个新对象。
以缓存数据保持正确或在无效时被删除的方式构建您的类和测试。before考虑添加一个方法来清除缓存并在 rspec块中调用它。