Как написать rspec для метода модели в рельсах? - PullRequest
0 голосов
/ 02 ноября 2011

Привет, у меня есть следующий метод в моей модели EnrolledAccount, для которого я хочу написать rpec. У меня вопрос, как я могу создать связь между Item и EnrolledAccount в rspec.

  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

1 Ответ

1 голос
/ 02 ноября 2011

Как правило, вы бы использовали factory_girl для создания набора связанных объектов в базе данных, с которыми вы можете протестировать.

Но из вашего кода у меня сложилось впечатление, что ваши отношениянеправильно настроен.Если вы установили свои отношения, вы можете указать, что делать при автоматическом удалении элемента.

Например,

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

[РЕДАКТИРОВАТЬ] Используя драгоценный камень, такой как musta или замечательный, написаниеСпецификация также очень проста:

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

Надеюсь, это поможет.

...