У меня есть after_update
обратный вызов на моей модели, и я пытаюсь проверить, правильно ли он запускается, но кажется, что он вообще не вызывается:
class HealthProfile < ApplicationRecord
after_update :send_office_email, if: -> { should_send_office_email }
def should_send_office_email
p "prev: #{previous_changes.keys.include?("step")}"
p "status: #{status == 'start'}"
p "step: #{step == '4'}"
previous_changes.keys.include?("step") && status == 'start' && step == '4'
end
end
RSpec.describe HealthProfile, type: :model do
let!(:client) { create(:client) }
let!(:intro_hp) { create(:health_profile, client_id: client.id)}
# passes
it "should not send office email unless complete" do
expect(intro_hp).not_to receive(:send_office_email)
intro_hp.update(signature: "t")
end
# fails
it "should send office email if complete" do
expect(intro_hp).to receive(:send_office_email)
intro_hp.update(step: "4")
end
end
Результат:
Failures:
1) HealthProfile should send office email if complete
Failure/Error: expect(intro_hp).to receive(:send_office_email)
(#<HealthProfile id: 2, name: "Brendan"...)
expected: 1 time with any arguments
received: 0 times with any arguments
# ./spec/models/health_profile_spec.rb:27:in `block (2 levels) in <top (required)>'
Причина, по которой я думаю, что обратный вызов не вызывается в тесте, заключается в том, что на моем терминале ничего не печатается, несмотря на то, что в should_send_office_email
.
есть 3 оператора * Чего мне не хватает?
РЕДАКТИРОВАТЬ: Показаны фабрики:
FactoryBot.define do
factory :health_profile do
name { Faker::Name.name }
email { Faker::Internet.email }
dob { (Date.today - 25.years).strftime("%m/%d/%Y") }
association :location
weight { 100 }
height { "5' 10" }
desired_weight { 100 }
informed { 'Friend / Family'}
pacemaker { true }
status { 'start' }
marital_status { 'married' }
children { true }
children_ages { "5 and 7" }
stress_source { "work!" }
occupation { 'JOB!' }
weightloss_success { true }
weightloss_fail { true }
weightloss_success_times { 2 }
weightloss_unsuccess_times { 2 }
other_programs { "WW"}
exercise { true}
exercise_type {"weights"}
exercise_freq {'daily'}
weightloss_desire {10}
daily_stress{10}
end