监视同一命名空间的 类
Spying on Classes of the Same Namespace
我正在为属于同一个命名空间的两个 classes 创建间谍,目的是希望每个都收到特定的参数:
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
当我这样做时,第二个间谍无法正常工作,而是 returns 第一个间谍对象。我怀疑这与它是一个命名空间 class 有关。这是预期的行为吗?是否有处理命名空间 class 间谍的替代方法?
您将两者都分配给 @seb_smtp_api
变量,这就是问题的根源。
您可能首先调用 seb_send_email
方法,然后它被记忆为 @seb_smtp_api
,当您调用 seb_smtp_api
时它只是 returns 记忆值。
您可以通过将 allow
替换为 expect
来检查并查看 SibApiV3Sdk::SMTPApi
的 new
方法从未被调用。
我正在为属于同一个命名空间的两个 classes 创建间谍,目的是希望每个都收到特定的参数:
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
当我这样做时,第二个间谍无法正常工作,而是 returns 第一个间谍对象。我怀疑这与它是一个命名空间 class 有关。这是预期的行为吗?是否有处理命名空间 class 间谍的替代方法?
您将两者都分配给 @seb_smtp_api
变量,这就是问题的根源。
您可能首先调用 seb_send_email
方法,然后它被记忆为 @seb_smtp_api
,当您调用 seb_smtp_api
时它只是 returns 记忆值。
您可以通过将 allow
替换为 expect
来检查并查看 SibApiV3Sdk::SMTPApi
的 new
方法从未被调用。