After_udpate rails испытание на провал обратного вызова - PullRequest
0 голосов
/ 21 февраля 2019

У меня есть хук :after_update для отправки электронного письма при изменении статуса заказа.Кажется, что следующий тест не пройден, потому что :order_status_id_chaned? возвращает false.

Test:

context 'when the order_status changes' do
  it 'should send an email' do
    @order2.save
    expect(subject).to receive(:send_confirmation_email)
    @order2.update(order_status_id: 2)
  end
end

Order.rb

class Order < ApplicationRecord
  after_update :send_confirmation_email, if: :order_just_submitted? 

  def order_just_submitted?
    p self.order_status_id_changed? # prints false
    p self.is_submitted? # prints true
    self.order_status_id_changed? and self.is_submitted?
  end

  def send_confirmation_email
    ...
  end
end

Есть идеи, почему :order_status_id_chaned? возвращает false после обновления значения?

1 Ответ

0 голосов
/ 21 февраля 2019

order_status_id_changed? ложно в точке, где оно вызывается, потому что оно вызывается только после обновления.После сохранения записи изменения переносятся в previous_changes, поэтому вы можете сделать что-то вроде:

def order_just_submitted?
  previous_changes.keys.include?('order_status_id') && is_submitted?
end

Кроме того, вы можете проверить, на какой статус был изменен, если вы не хотите инициироватьэлектронное письмо при любом изменении статуса.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...