Rails模块 - 在测试期间包括不同模块

时间:2013-12-17 15:49:35

标签: ruby-on-rails ruby rspec module

所以我有这个问题:

我有我的班级:

class User < ActiveRecord::Base
  after_initalize :include_proper_module

  private
  def include_proper_module
    if variable1 = 1
      self.class.send(:include, Module1)
    else
      self.class.send(:include, Module2)
    end
  end
end

它工作正常,直到我运行所有测试 - 然后如果其中一个测试包含Module1,那么它总是包含在内。

我将database_cleaner与删除策略一起使用,并且不知道我应该在哪里或如何调试它。有没有选项可以在测试之后/之前重置所有包含的模块?

1 个答案:

答案 0 :(得分:2)

无论测试如何,该代码都是错误的。事实上,包含该模块会影响整个类定义。

根据实例变量有条件地包含模块没有意义。只要变量为1,Module1就会混合到每个用户实例的类中。只要变量不同于1,Module2就会混合到每个用户的用户类中。

结果是每个用户实例都会快速包含两个模块。

我相信这是测试揭示的内容。我不确定你想要完成什么,但这不是正确的方法。