在Rspec中从Mailer获取一个实例变量

时间:2014-06-20 14:34:16

标签: ruby-on-rails ruby rspec actionmailer

我正在尝试验证在我的UserMailer模型中调用方法时是否设置了给定的实例变量。我正在使用RSpec,似乎无法弄明白。

这是邮件:

class UserMailer < ActionMailer::Base
  def client_connexion_notification(connexion)
    @connexion = connexion
    mail to: "test@test.com", 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的行为不同,因为你真的不应该创建它的新实例。 (方法new是私有的)

我能想到的另一个选择是测试使用ActionMailer :: Base.deliveries创建的实际电子邮件的内容,但我宁愿测试变量的实际内容。

顺便说一下,我以为我可以通过ActionMailer :: Base.deliveries.last.instance_variable_get(:@ connexion)得到它,但是没有。

1 个答案:

答案 0 :(得分:0)

您可以测试生成的电子邮件中是否存在变量,如下所示:

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

这假设邮件不是多部分。