【发布时间】:2011-09-14 18:39:02
【问题描述】:
Ruby on Rails 3 (3.0.7) 是否提供了按需重新加载类缓存的机制?我正在运行一些测试,其中我覆盖了 ApplicationController 和我的一些模型中的一些方法以排除身份验证。例如,我在我的一些标签 (Before('@tag')) 中调用了一个方法(我正在使用 Cucumber 进行测试):
ApplicationController.send(:define_method, :current_user) do
@current_user ||= User.where(:id => cookies[:user_id]).first
end
...ApplicationController 中的实际 current_user 方法具有不同的行为。
这很好用,直到我需要运行一些我不想在其中存根这些方法的测试。在我的测试环境中设置config.cache_classes = true 后,如果没有我的猴子补丁,ApplicationController 不会重新初始化,这使得我不想存根的测试失败。使用config.cache_classes = false,我的猴子补丁在下一个请求中被遗忘,导致我需要存根的所有测试都失败。
理想情况下,如果可能的话,我希望能够在After('@tag') 方法中擦除类缓存。我怎样才能做到这一点?或者有没有更好的方法在我忽略的某些场景中删除某些方法?
【问题讨论】:
标签: ruby-on-rails ruby-on-rails-3