监视相同名称空间的类

时间:2018-07-15 16:14:55

标签: ruby-on-rails ruby rspec sendinblue

我正在为属于同一名称空间的两个类创建间谍,目的是希望每个类都接收特定的参数:

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 个答案:

答案 0 :(得分:2)

您将两者都分配给@seb_smtp_api变量,这就是问题的根源。

您可能首先调用seb_send_email方法,然后将其记忆为@seb_smtp_api,并且当您调用seb_smtp_api时,它仅返回记忆的值。

您可以通过将allow替换为expect来进行检查,以查看从未调用过SibApiV3Sdk::SMTPApi的{​​{1}}方法。

相关问题