我试图验证在调用UserMailer模型中的方法时是否设置了给定的实例变量我正在使用RSpec,但似乎无法解决。
这是邮递员:

class UserMailer < ActionMailer::Base
  def client_connexion_notification(connexion)
    @connexion = connexion
    mail to: "[email protected]", subject: "Connexion!"
  end
end

还有测试:
it "should set @connexion" do
  UserMailer.client_connexion_notification("stackoverflow")
  UserMailer.instance_variable_get(:@connexion).should == "stackoverflow"
end

我知道我应该在模型的一个实例上调用instance_variable_get,但我猜ActionMailer的行为有所不同,因为您不应该真正创建它的新实例(新方法是私有的)
我可以想到的一个替代方法是测试用ActionMailer::Base.deliveries创建的实际电子邮件的内容,但我宁愿测试变量的实际内容。
顺便说一下,我想我可以用ActoMaMeLe::Base.递送。

最佳答案

相反,您可以测试结果电子邮件中是否存在该变量,如下所示:

it "should set @connexion" do
  mail = UserMailer.client_connexion_notification("stackoverflow")
  mail.raw_source.should include("stackoverflow")
end

这假设邮件不是多部分的。

关于ruby-on-rails - 从Rspec中的Mailer获取实例变量,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/24329736/

10-12 05:16