我想要做的是计算数据库中的所有对象。我从这样的事情开始:
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
如何确保包含这些内容?
答案 0 :(得分:1)
这不是您的问题的答案,而是为了加快测试套件的建议。
您可以使用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))