RSpec检查消息是否已在Slack上发送

时间:2020-02-24 09:01:37

标签: ruby rspec vcr

我有一个班级负责向Slack直接发送消息给每位在两天内未更新其Jira票证的记者。为了发送消息,所描述的类使用了send_message方法(其位于HTTParty.post下)。我使用的是VCR gem,但如果最后没有得到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类中的更改(来自ReporterReminderMessenger.call的fetch_pending.count == 4

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 :(得分:0)

我认为问题在于您需要检查orElseGet。就是说,我可能不会为此而使用VCR,而只是嘲笑请求/响应。像这样:

MessageSender.count

此外,这段代码或多或少地读取了业务逻辑,而不是真正需要持久化的对象。您可能要签出CollectiveIdea's Interactor Gem