ruby-on-rails - 测试 Rails JSON API 资源回调
问题描述
如何单元测试我的 JSON API 资源回调已注册为after_create
,并且调用了 send_notifications,我可以expect(MyMailer).to receive(:welcome_email)
吗?
当我尝试allow
& expect
MyResource#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
解决方案
我通过功能测试邮件解决了这个问题。
这可以通过向控制器规范中添加一个测试用例来完成,该测试用例将触发资源回调的控制器操作。
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
推荐阅读
- angularjs - 如何使用我从 Ionic 中的 REST api 检索到的结果
- ios - 我可以使用 Callkit SDK 设置对 SIP URI 的呼叫吗
- http - HEAD 请求返回响应的后果
- ios - 适用于 iOS 的全屏背景图像分辨率
- javascript - 将 Drop Ship PO 添加到 NetSuite 中的现有销售订单
- tensorflow - 当前一层中的 mask_zero=True 时,由于连接层,Keras 图像字幕模型无法编译
- react-native - 如何自定义 headerLeft React Navigation?
- ssas - SSAS 表格表达式表无法从 SQL Server 数据源加载
- java - Java Optional 与传统的缺失值处理有何不同?或者如何正确使用Java Optional
- assembly - (缓冲区溢出利用)无法覆盖 $ebp 和 $eip 寄存器