首页 > 解决方案 > 测试 Rails JSON API 资源回调

问题描述

如何单元测试我的 JSON API 资源回调已注册为after_create,并且调用了 send_notifications,我可以expect(MyMailer).to receive(:welcome_email)吗?

当我尝试allow& expectMyResource#send_notifications 或 MyMailer.welcome_email 时,他们的电话不会被跟踪。

    class MyResource < BaseResource

      after_create :send_notifications

      def send_notifications
        MyMailer.welcome_email(_model).deliver
      end
    end


    # rspec

    RSpec.describe Creem::Jpi::V1::MyResourceResource, type: :resource do
      include JsonApiResourceHelpers

      let(:my_resource) { create(:my_resource) }
      subject { described_class.new(my_resource, {}) }

      it { expect(described_class).to be < BaseResource }

      describe 'callbacks' do
        xit 'how do I unit test my callbacks?'
      end
    end

标签: ruby-on-railsjsonapi-resources

解决方案


我通过功能测试邮件解决了这个问题。

这可以通过向控制器规范中添加一个测试用例来完成,该测试用例将触发资源回调的控制器操作。

    RSpec.describe MyResourceController, type: :controller do
      describe 'POST #create' do
        subject { post :create, params: { data: data } }

        it 'sends new notifications' do
          expect { subject }.to change { ActionMailer::Base.deliveries.size }.by(1)
        end
      end
    end

推荐阅读