测试Sidekiq的工作叫邮件程序

时间:2018-06-12 13:40:45

标签: ruby-on-rails ruby sidekiq

我正在测试我的Sidekiq工作,我正在试图弄清楚如何确保它使用正确的参数调用作业中的方法。这是我的实际工作:

JOB:

def perform
  csv = Campaign.to_csv
  email = current_sso_user.email

  CampaignMailer.send_csv(email, csv).deliver_now
end

我想构建一个测试,确保使用正确的args调用CampaignMailer.send_csv。

以下是我目前的情况:

TEST:

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

但这是一个语法错误。谁能给我一些指导如何正确测试?谢谢!

1 个答案:

答案 0 :(得分:1)

来自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示例,0失败"

所以在你的情况下:

CampaignMailer.should_receive(:send_csv).with(<expected_email_arg>, <expected_csv_arg>)

您还可以添加.and_return(<expected_return_value>)来测试返回值。