RSpe c проверить, было ли отправлено сообщение в Slack - PullRequest
0 голосов
/ 24 февраля 2020

У меня есть класс, который отвечает за отправку прямого сообщения о Slack каждому репортеру, который не обновил свой билет Jira в течение 2 дней. Для отправки сообщения описанный класс использовал метод send_message (под ним HTTParty.post). Я c использую гем VCR, но я не знаю, как проверить такое поведение, если в конце я не получаю код 2xx или 3xx.

reporter_reminder_messenger

class ReporterReminderMessenger
    def call
      fetch_pending.each do |issue|
        send_message(issue)
      end
    end

    private

    def fetch_pending
      @fetch_pending ||= Jira::FetchPendingStatus.new.call
    end

    def send_message(issue)
      MessageSender.new(
        user_id: get_user_id(reporter_email(issue)),
        message: create_text_message(issue)
      ).call
    end

Я пытался проверить изменения в MessageSender классе (fetch_pending.count == 4 из ReporterReminderMessenger.call)

specs

RSpec.describe ReporterReminderMessenger do
  let(:reporter_reminder) { ReporterReminderMessenger.new.call }

  it 'returns only pending issues' do
    VCR.use_cassette('reminder_messenger') do
      expect { reporter_reminder }.to change { MessageSender }.by(4)
    end
  end
end

Но я получаю сообщение об ошибке:

NoMethodError:
       undefined method `-' for Slack::MessageSender:Class

1 Ответ

0 голосов
/ 26 февраля 2020

Я считаю, что проблема в том, что вам нужно проверить MessageSender.count. Тем не менее, я бы, вероятно, не стал бы использовать VCR для этого, а просто издевался над запросами / ответами. Что-то вроде:

subject(:reminder) { described_class.new }

let(:call)        { reminder.call }
let(:jira_status) { instance_double(Jira::FetchPendingStatus, call: jira_call) }
let(:jira_call)   { some_response_hash_or_whatever }

before do
  # Ensure any new object created will return the mocked jira_status object
  allow(Jira::FetchPendingStatus).to receive(:new) { jira_status } 
end

# I'm assuming the intention was to count the number of DB records created?
it { expect { call }.to change { MessageSender.count }.by(4) }

it 'fetches pending JIRA status' do
  expect(jira_status).to receive(:call)
  call
end

Кроме этого, этот код более или менее читается как бизнес-логика c, а не объекты, которые нужно сохранять; Вы можете проверить Gem Interactor CollectiveIdea

...