Rspe c: запущен тестовый обратный вызов - PullRequest
0 голосов
/ 09 января 2020

У меня есть 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
...