我有一个表叫Group
。
class Group < ApplicationRecord
belongs_to :admin, class_name: "User", foreign_key: :admin_id
has_many :memberships, dependent: :destroy
has_many :users, through: :memberships
has_many :tasks, dependent: :destroy
has_many :tags, dependent: :destroy
has_many :invitations, dependent: :destroy
end
我正在创建删除组时的一些测试。删除组后,我希望检查组是否已删除以及关联记录是否也已删除。
it "deletes the group" do
expect(Group.find(group.id)).to_not be_present
end
it "deletes the group's dependent associations" do
expect(Task.where(group: group).count).to eq 0
expect(Tag.where(group: group).count).to eq 0
expect(Invitation.where(group: group).count).to eq 0
expect(Membership.where(group: group).count).to eq 0
end
我是这样写的,但感觉真的很重复。我想知道是否有另一种方法可以创建一个查询来获取数组中所有关联的记录,并检查数组是否为空。
我试着像这样连接where
:
Task.where(group: g).and(Tag.where(group: g)).and(Membership.where(group: g)).and(Invitation.where(group: g))
但它抛出以下错误:(Object doesn't support #inspect)
我读过关于joins
的文章,但不能正确理解它,所以我不确定它是否是正确的方向。
任何帮助都将不胜感激。谢谢!
PD:我正在使用PostgreSQL作为数据库
4条答案
按热度按时间vkc1a9a21#
我不会测试这种行为,因为它只测试Ruby on Rails提供的实现,而Rails方法已经在框架内部进行了测试。
如果您真的想测试您的实现,那么我建议添加
shoulda-matcher
gem并测试关联是否按预期配置,如下所示:dfddblmv2#
这不是表连接的任务,因为删除组时这些表没有要连接的内容。
可以通过在循环中调用
expect
来删除重复:jv2fixgn3#
为了测试行为,我认为最好是一个一个地测试,但是,一般来说,遵循良好的实践,而不是一个有几个期望的it,最好的事情是每个期望都有一个it。
b1payxdu4#
您可以使用以下命令获取记录类上的所有关联
组.反映所有关联
它会给予你一个联想数组。联想样本-
还可以使用
reflect_on_association
方法获取特定关联的详细信息组.反映关联(:用户)