我有一个班级负责向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
答案 0 :(得分:0)
我认为问题在于您需要检查orElseGet
。就是说,我可能不会为此而使用VCR,而只是嘲笑请求/响应。像这样:
MessageSender.count
此外,这段代码或多或少地读取了业务逻辑,而不是真正需要持久化的对象。您可能要签出CollectiveIdea's Interactor Gem