ruby-on-rails - 测试名为 mailer 的 Sidekiq 作业
问题描述
我正在测试我的 Sidekiq 工作,并试图弄清楚如何确保它在工作中调用具有正确参数的方法。这是我的实际工作:
工作:
def perform
csv = Campaign.to_csv
email = current_sso_user.email
CampaignMailer.send_csv(email, csv).deliver_now
end
我想构建一个测试,确保使用正确的参数调用 CampaignMailer.send_csv。
这是我目前拥有的:
测试:
RSpec.describe CampaignsExortJob, type: :model do
subject(:job) { CampaignsExportJob.new }
describe '#perform' do
let(:campaign) { create(:campaign) }
it 'sends the csv email' do
expect(job).to receive(:CampaignMailer.send_csv)
end
end
end
但这是一个语法错误。谁能给我一些关于如何正确测试的指导?谢谢你!
解决方案
从 rspec 文档(https://relishapp.com/rspec/rspec-mocks/v/2-14/docs/message-expectations/expect-message-using-should-receive):
期望带有参数的消息给定名为“spec/account_spec.rb”的文件,其中:
require "account"
require "spec_helper"
describe Account do
context "when closed" do
it "logs an account closed message" do
logger = double("logger")
account = Account.new logger
logger.should_receive(:account_closed).with(account)
account.close
end
end
end
还有一个名为“lib/account.rb”的文件:
Account = Struct.new(:logger) do
def close
logger.account_closed(self)
end
end
当我运行 rspec spec/account_spec.rb 然后输出应该包含“1 example, 0 failures”
所以在你的情况下:
CampaignMailer.should_receive(:send_csv).with(<expected_email_arg>, <expected_csv_arg>)
您还可以添加一个.and_return(<expected_return_value>)
来测试返回值。
推荐阅读
- django - 如何通过 GraphQL 获取查询字符串并触发函数以使用 Django 返回响应?
- asp.net-core - Asp Net Core - 错误持久值对象
- php - php "!=" 条件语句评估不正确
- google-sheets - 跨多个工作表的多个列的 Google 表格 VLOOKUP
- sql - 在 CASE 中使用函数
- c# - 如何分割字符串的一部分
- msbuild - dotCover 不为所有程序集生成覆盖率
- python - 从文件选择创建着色器并应用于选定对象
- dialogflow-es - 如何查看从 Google Dialogflow 发送到 Google Cloud Speech-to-Text API 的请求日志
- reactjs - 尝试实现 useEffect 时发生奇怪的错误