加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

ruby-on-rails – 用于在rspec测试之间重置类变量的清洁解决方案

发布时间:2020-12-16 22:38:33 所属栏目:百科 来源:网络整理
导读:是否有更好的方法来清除Rspec测试之间的类变量,而不是从after(:each)方法中明确地清除它们?我更喜欢一种“清除它们”的方式,而不是必须记住每次都将它们添加到config.after … config.after(:each) do DatabaseCleaner.clean Currency.class_variable_set
是否有更好的方法来清除Rspec测试之间的类变量,而不是从after(:each)方法中明确地清除它们?我更喜欢一种“清除它们”的方式,而不是必须记住每次都将它们添加到config.after …
config.after(:each) do
  DatabaseCleaner.clean

  Currency.class_variable_set :@@default,nil
end

解决方法

我最后通过在lib / auto_clean_class_variables.rb中定义一个方法来重置给定类的所有类变量
module AutoCleanClassVariables
  def reset_class_variables
    self::CLASS_VARIABLES_TO_CLEAN.each do |var|
      class_variable_set var,nil
    end
  end
end

并在config.after(:each)中调用此方法,位于spec_helper.rb中

config.append_after(:each) do
  DatabaseCleaner.clean

  # Find all ActiveRecord classes having :reset_class_variables defined
  classes = ActiveSupport::DescendantsTracker.descendants(ActiveRecord::Base)
  classes.each do |cl|
    if cl.methods.include?(:reset_class_variables)
      cl.reset_class_variables
    end
  end
end

需要“清理”的模型可以引导此行为:

extend AutoCleanClassVariables
CLASS_VARIABLES_TO_CLEAN = [:@@default]

这样一切正常,如果你试图将这些类的对象相互比较,那么没有(不必要的)重新加载类会导致问题(参见我之前的评论)

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读