Протестируйте callback after_create_commit, используя gem + rails 5 + rspec - PullRequest
0 голосов
/ 06 мая 2019

Я использую shoulda-callback-matchers gem для проверки обратного вызова. Версия Rails - 5.2.2, а версия RSpec - 3.8.0.

Кто-нибудь знает, как проверить after_create_commit обратный вызов, используя shoulda-callback-matchers gem?

Работает для after_create и after_update.

код модели

after_create :admission_created_notification
after_update :admission_status_change_notification

пример образца

context "callbacks" do
 let(:admission) { create(:admission) }
   it { expect(admission).to callback(:admission_created_notification).after(:create) }
   it { expect(admission).to callback(:admission_status_change_notification).after(:update) }
end

Ответы [ 2 ]

0 голосов
/ 06 мая 2019

Я не использовал вышеупомянутый драгоценный камень. Я использую способ Rspec по умолчанию, чтобы написать rspec для этих обратных вызовов. Код модели обратного вызова

class Admission < ApplicationRecord
  after_create_commit :admission_created_notification
  after_update_commit :admission_status_change_notification
end

Код спецификации модели

context 'create and update' do
    let(:student_detail) { FactoryBot.create(:student_detail) }
    let(:institute_program) { FactoryBot.create(:institute_program) }
    let(:admission) { FactoryBot.create(:admission, student_detail: student_detail, institute_program: institute_program) }
    it 'When create' do
      admission.student_detail.notifications.count(1)
      admission.institute_program.institute_detail.notifications.count(1)
    end
    it 'When applied' do
      admission.update(status: 'applied')
      admission.student_detail.notifications.count(2)
      admission.institute_program.institute_detail.notifications.count(2)
    end
    it 'When accepted' do
      admission.update(status: 'accepted')
      admission.student_detail.notifications.count(3)
      admission.institute_program.institute_detail.notifications.count(3)
    end
    it 'When rejected' do
      admission.update(status: 'rejected')
      admission.student_detail.notifications.count(3)
    end
    it 'When approved' do
      admission.update(status: 'approved')
      admission.student_detail.notifications.count(4)
      admission.institute_program.institute_detail.notifications.count(4)
      admission.notifications.count(9)
    end
  end
0 голосов
/ 06 мая 2019

Примерно так:

RSpec.describe YourModel, type: :model do
  context 'callbacks check' do
    it { is_expected.to callback(:admission_created_notification).after(:create) }
    it { is_expected.to callback(:admission_status_change_notification).after(:update) }
  end
end
...