我想做的是计算数据库中的所有对象。我是这样开始的:
p ["TOTAL COUNT", ApplicationRecord.subclasses.sum(&:count)]
但在实验中我发现…
[5] pry(main)> ApplicationRecord.subclasses.count => 6
我希望能得到更多的回报。我可以检查一下子类,发现有一些不见了。
然后我发现…
[8] pry(main)> ActiveRecord::Base.descendants.count => 10
又增加了一些。我又一次可以单独检查它们,我发现有几个不见了。这是一个失踪的例子…

class MerchantsPrincipal < ApplicationRecord
end

class Principal < MerchantsPrincipal
end

我如何确保这些也包括在内?

最佳答案

这不是你问题的答案,而是为了加快你的测试速度而给你的建议。
你可以用FactoryGirl缓存,如下所示:

class RecordCache
  def self.[](key)
    all.fetch(key)
  end

  def self.register(name, object)
    all[name] = object
  end

  def self.setup!
    register :admin_user, FactoryGirl.create(:user, is_admin: true)
  end

  private

  def all
    @all ||= {}
  end
end

在运行测试套件之前,您需要在RecordCache.setup!中调用test_helper.rb
之后,您将能够要求此RecordCache提供实例,而不是让FactoryGirl再次创建它:
FactoryGirl.define do
  factory :post do
    # title content etc.
    user { RecordCache[:admin_user] }
  end
end

因此,每次调用FactoryGirl.create(:post),它都不会创建另一个用户。这带来了一些问题,因为同一条记录是通过应用程序缓存的,不应修改。但是,如果需要特定上下文的特定用户,仍然可以执行以下操作:
FactoryGirl.create(:post, user: FactoryGirl.create(:user, :super_admin))

09-26 17:29
查看更多