объект утверждений обратного вызова after_destroy все еще существует - PullRequest
0 голосов
/ 11 сентября 2018

У меня есть after_destroy обратный вызов, который я ожидаю вернуть nil, но вместо этого все еще имеет значение.

class WeighIn < ActiveRecord::Base
  belongs_to :check_in
  after_destroy :add_employee_weightloss

  def add_employee_weightloss
    p self.check_in.weigh_in.present? # returns true
  end
end

характеристики:

it "employee weightloss" do
  ci = CheckIn.create()
  wi = WeighIn.create(check_in_id: ci.id)

  wi.destroy
  expect(wi.reload).to eq(nil) # returns wi instead of nil
end

1 Ответ

0 голосов
/ 11 сентября 2018

Вместо этого следует использовать destroyed? (или exists?, или persisted?), поскольку present? просто проверяет наличие объекта, что является правильным поведением после уничтожения (destroy само возвращает удаленный объект) .

def add_employee_weightloss
  p check_in.weigh_in.destroyed?
end

Также не следует использовать следующее:

expect(wi.reload).to eq(nil)

потому что, если wi был уничтожен, вы получите исключение ActiveRecord::RecordNotFound вместо nil. Вы можете попробовать следующее:

it "employee weightloss" do
  wi = WeighIn.create(check_in: CheckIn.create)
  wi.destroy

  expect(wi.destroyed?).to eq(true)
end
...