在rspec中使用动态mixin重新加载类

时间:2013-12-05 17:44:44

标签: ruby-on-rails ruby rspec code-caching

我有以下型号

class Chicken < ActiveRecord::Base

  after_initialize :grow_up

  def grow_up
    if gender == "female"
      self.class.send(:include, Hen)
    elsif gender == "male"
      self.class.send(:include, Rooster)
    end
  end

end

module Hen

   def communicate
     "cluck cluck!"
   end

end

module Rooster

   def communicate
     "cock-a-doodle-doo!"
   end

end

然而,在运行rspec测试时,在第一次使用性别初始化Chicken之后,即使在config / environments / test.rb中将cache_classes设置为false,也会缓存通信方法,并且所有Chicken都会说出与性别无关的信息。 p>

如何在测试执行期间重新加载Chicken类或修改此代码以消除此问题?

1 个答案:

答案 0 :(得分:0)

我决定转而使用单表继承(http://api.rubyonrails.org/classes/ActiveRecord/Base.html#label-Single+table+inheritance),这有望解决这个问题。