Следите за классами одного и того же пространства имен
Я создаю шпионов для двух классов, принадлежащих к одному пространству имен, с целью ожидать, что каждый получит конкретные аргументы:
allow(SibApiV3Sdk::SendSmtpEmail).to receive(:new).and_return(seb_send_email)
allow(SibApiV3Sdk::SMTPApi).to receive(:new).and_return(seb_smtp_api)
def seb_send_email
@seb_smtp_api ||= SibApiV3Sdk::SendSmtpEmail.new(email_params)
end
def seb_smtp_api
@seb_smtp_api ||= SibApiV3Sdk::SMTPApi.new
end
Когда я это делаю, второй шпион не работает должным образом и возвращает первый шпионский объект. Я подозреваю, что это как-то связано с классом пространства имен. Это ожидаемое поведение и есть ли альтернативный подход для обработки шпионов классов в пространстве имен?
1 ответ
Вы назначаете оба @seb_smtp_api
переменная, и это источник ваших проблем.
Вы, вероятно, называете seb_send_email
метод, затем он запоминается как @seb_smtp_api
и когда вы звоните seb_smtp_api
он просто возвращает запомненное значение.
Вы можете проверить это, заменив allow
с expect
и посмотри что SibApiV3Sdk::SMTPApi
"s new
метод никогда не вызывается.