Ruby on Rails 3(3.0.7)是否提供了一种按需重新加载类缓存的机制?我正在运行一些测试,其中我覆盖了ApplicationController中的一些方法以及我的一些模型中的某些方法,用于取消身份验证。例如,我称之为我的一些标记(Before('@tag')
)的,这是否一种方法(我用黄瓜进行检测):Ruby on Rails - 按需重新加载类缓存
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')
方法中擦除类缓存,如果可以的话。我怎么能做到这一点?或者,在我忽略的某些情况下,是否有更好的方法来剔除某些方法?
好的,我没有使用Dispatcher回调,但我做的是创建一个名为reload的方法,我在'After('@ tag')do'中调用,它加载了包含我的猴子修补。例如,'load'#{Rails.root} /app/controllers/application_controller.rb“'。现在,当我的非桩测试运行时,它们运行时没有猴子补丁。谢谢您的帮助! –
只要小心一些事情:当你重新加载一个班级时,将会考虑到更改和加载项,但不会删除。 – apneadiving
好的,谢谢你的提醒。我认为我的测试桩测方法不会改变,所以现在它就是这样做的。 –