在ActiveRecord类上存储由插件添加的方法

时间:2011-05-10 12:07:02

标签: ruby-on-rails rspec stub

我在User模型上使用插件acts_as_audited。所以我在user.rb中有以下内容 -

class User < ActiveRecord::Base
  acts_as_audited
end

我知道插件acts_as_audited有效,因为它有自己的单元测试。

我希望在我自己的规范中存根“acts_as_audited”的调用,因为每当我创建用户或对其进行更改时,acts_as_audited会执行其操作,并审核每个更改。

如果我可以删除acts_as_audited调用以便它不会访问数据库,那么我的测试会运行得更快。

谢谢!

1 个答案:

答案 0 :(得分:2)

我认为act_as_audited没有任何内置的存根插件,但有一个功能请求:

https://github.com/collectiveidea/acts_as_audited/issues/18

一种解决方案是编写一个钩子,以避免在静态类变量为false时写入数据库:

module CollectiveIdea::Acts::Audited::InstanceMethods
  private
    def write_audit(attrs)
      self.audits.create attrs if auditing_enabled && Audit.auditing_enabled?
    end
end

class Audit
  @@auditing_enabled = true
  def self.auditing_enabled?
    @@auditing_enabled
  end

  def self.disable_auditing
    @@auditing_enabled = false
  end

  def self.enable_auditing
    @@auditing_enabled = true
  end
end