您好我在我想要编写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
答案 0 :(得分:1)
通常,您会使用factory_girl在数据库中创建一组相关对象,您可以根据这些对象进行测试。
但是,从您的代码中我得到的印象是您的关系设置不正确。如果您设置了关系,则可以指示rails自动删除项目时的操作。
E.g。
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这样的宝石或非凡的宝石,编写规范也很容易:
describe EnrolledAccount do
it { should have_many :items }
it { should have_many :item_shipping_details }
end
希望这有帮助。