代码之家  ›  专栏  ›  技术社区  ›  Bitwise

测试称为mailer的sidekiq作业

  •  0
  • Bitwise  · 技术社区  · 7 年前

    我正在测试SideKiq作业,我正在尝试找出如何确保它使用正确的参数调用了作业中的一个方法。这是我的实际工作:

    工作:

    def perform
      csv = Campaign.to_csv
      email = current_sso_user.email
    
      CampaignMailer.send_csv(email, csv).deliver_now
    end
    

    我想建立一个测试来确保用正确的参数调用campaignmail.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
    

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

    1 回复  |  直到 7 年前
        1
  •  1
  •   ruby_newbie    7 年前

    来自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>) 测试返回值。