У меня есть простая модель с обратным вызовом after_save
для обновления некоторых вещей в связанной модели при изменении статуса:
class Model < ApplicationRecord
has_many :related_records
after_update :check_change
enum :status { 'status1', 'status2'}
def check_change
return unless saved_change_to_status?
related_records.each(&:schedule_email)
end
Теперь я хотел бы протестировать этот метод с помощью Rspe c. Сначала я проверил, вызывается ли метод, что успешно:
it "should be called"
expect(subject).to receive(:check_change)
subject.save
end
Теперь я хотел бы проверить, получает ли каждая из связанных записей метод schedule_email
:
it 'should call method on related records' do
subject.update(status: 'status2')
subject.emails.each do |msg|
expect(msg).to receive(:schedule_email)
end
end
Как-то это не работает. Я также попытался позвонить update
после ожидания, но безуспешно. Я не могу понять, что происходит не так. Есть идеи?
Редактировать: Я также создал точку останова после оговорки в методе. Во время теста он останавливает выполнение, поэтому я предполагаю, что метод schedule_email вызывается для всех связанных записей ... я должен expect
по-другому?