0

嗨,我在要为其编写 rpec 的 EnrolledAccount 模型中有以下方法。我的问题是如何在 rspec 中创建 Item 和 EnrolledAccount 之间的关联。

  def delete_account
    items = self.items
    item_array = items.blank? ? [] : items.collect {|i| i.id } 
    ItemShippingDetail.destroy_all(["item_id in (?)", item_array]) unless item_array.blank?
    ItemPaymentDetail.destroy_all(["item_id in (?)", item_array]) unless item_array.blank?
    Item.delete_all(["enrolled_account_id = ?", self.id])
    self.delete
  end
4

1 回答 1

1

通常,您会使用factory_girl在数据库中创建一组相关对象,您可以对其进行测试。

但是,从您的代码中,我得到的印象是您的关系设置不正确。如果您设置了关系,您可以指示 rails 在自动删除项目时要做什么。

例如

class EnrolledAccount
  has_many :items, :dependent => :destroy
  has_many :item_shipping_details, :through => :items
  has_many :item_payment_details, :through => :items
end

class Item
  has_many :item_shipping_details, :dependent => :destroy
  has_many :item_payment_details, :dependent => :destroy
end

如果您的模型是这样定义的,则会自动处理删除。

因此,您delete_account可以编写如下内容,而不是您的:

account = EnrolledAccount.find(params[:id])
account.destroy

[编辑] 使用像shoulda或显着这样的 gem,编写规范也很容易:

describe EnrolledAccount do
  it { should have_many :items }
  it { should have_many :item_shipping_details }
end

希望这可以帮助。

于 2011-11-02T13:07:20.277 回答