Проверьте эту работу Sidekiq под названием почтовик - PullRequest
0 голосов
/ 12 июня 2018

Я тестирую свою работу в Sidekiq и пытаюсь выяснить, как убедиться, что она вызывает метод в работе с правильными аргументами.Вот моя настоящая работа:

JOB:

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

  CampaignMailer.send_csv(email, csv).deliver_now
end

Я хотел бы создать тест, который обеспечит вызов 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 голосов
/ 12 июня 2018

Из документов 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 сбоев»

, поэтому в вашемcase:

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

Вы также можете добавить .and_return(<expected_return_value>) для проверки возвращаемого значения.

...