Ruby on rails RubyonRails-按需重新加载类缓存

Ruby on rails RubyonRails-按需重新加载类缓存,ruby-on-rails,ruby-on-rails-3,Ruby On Rails,Ruby On Rails 3,RubyonRails3(3.0.7)是否提供了按需重新加载类缓存的机制?我正在运行一些测试,在这些测试中,我覆盖了ApplicationController和我的一些模型中的一些方法,以取消身份验证。例如,我在我的一些标记(Before(“@tag”))中调用了一个方法(我正在使用Cucumber进行测试),该方法执行以下操作: ApplicationController.send(:define_method, :current_user) do @current_user ||= Us

RubyonRails3(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中的实际当前用户方法具有不同的行为

这非常有效,直到我需要运行一些测试,在这些测试中,我不想删除这些方法。在我的测试环境中设置了
config.cache\u classes=true
后,如果没有我的monkey补丁,ApplicationController不会重新初始化,这会导致我不想退出的测试失败。使用
config.cache\u classes=false
,我的猴子补丁在下一个请求中被遗忘,导致我需要存根的所有测试失败


理想情况下,如果可能的话,我希望能够在
After('@tag')
方法中擦除类缓存。我怎样才能做到这一点?或者有没有更好的方法在我忽略的某些场景中删除某些方法?

您可以从中获得灵感,并充分利用
ActionDispatch::Callbacks

ActionDispatch::Reloader.cleanup!
ActionDispatch::Reloader.prepare!
我把这背后的理由贴在这里:


如果交叉发布同一个答案不好,请告诉我,它更喜欢发布与两个问题相关的答案……我很乐意这样做。

对于较新的Rails(>4.0),我能够在控制台中重新加载类定义,例如,使用
重新加载

好的,我没有使用Dispatcher回调,但是我创建了一个名为reload的方法,我在('@tag')do之后调用该方法,加载两个文件,其中包含我修补的类。例如,
load“#{Rails.root}/app/controllers/application#u controller.rb”
。现在,当我的非存根测试运行时,它们运行时没有猴子补丁。谢谢你的帮助!请注意:当你重新加载一个类时,会考虑更改和加载项,但不会考虑删除。好的,谢谢你的提醒。我不认为我的测试存根方法会改变,所以就目前的情况而言,这就是我的工作。