如何使用 rspec 测试 mandrill api

Posted

技术标签:

【中文标题】如何使用 rspec 测试 mandrill api【英文标题】:How do I test mandrill api with rspec 【发布时间】:2013-10-30 17:49:21 【问题描述】:

所以我的客户报告说许多电子邮件发给了错误的人,我想编写一些功能测试来查找并确保他们收到电子邮件以及我的规范中的内容。 我有使用 mandril api 的 mandrill_mailer,在它发出之前我想看看消息是什么。

例如。创建一个新的用户帐户 -> 创建用户,然后发送一封欢迎电子邮件。在设计中它调用 RegistrationMailer.new_registration(resource).deliver 然后向用户发送一封电子邮件:

  def new_registration(user)
user = User.find_by_email(user["email"])
mandrill_mail template: 'new-registration',
subject: 'Welcome to ContentBlvd!',
to:  email: user["email"], name: user["full_name"] ,
vars: 
  'first_name' =>   user["full_name"],
  'unsubscribe' =>  "#CONFIG[:protocol]#CONFIG[:host]/unsubscribe?email=#user.email"

结束

如何在我的邮件程序中测试这个邮件对象? 我尝试了 ActionMailer::Base.deliveries,但它返回 nil(因为我使用的是 mandrill mailer...) 所以我尝试了 - MandrillMailer::TemplateMailer.message 但没有运气....感谢您的帮助。

【问题讨论】:

【参考方案1】:

您不必使用 Mandrill gem 来使用 Mandrill 发送电子邮件。只需使用 Rails 默认 Mailer 并将配置添加到 application.rb 或 production.rb 即可使用您的 Mandrill 帐户。

http://help.mandrill.com/entries/21738467-Using-Mandrill-s-SMTP-integration-with-Web-Frameworks

【讨论】:

这没有回答问题。【参考方案2】:

此时,MandrillMailer 似乎支持robust offline testing 选项集。特别是,现在可以检查 MandrillMailer.deliveries 以用于预期或调试目的。

【讨论】:

【参考方案3】:

根据wiki,您需要模拟Excon

# spec/rails_helper.rb

config.before(:all) do 
  Excon.defaults[:mock] = true
  Excon.stub(, body: "\"html\":\"RESULT\"", status: 200)
end

【讨论】:

以上是关于如何使用 rspec 测试 mandrill api的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 RSpec 测试 ActionText?

如何在 rspec 中运行单个测试?

Rspec - 如何测试邮件是不是使用正确的模板

如何使用 RSpec 测试电子邮件标头

如何使用 RSpec 测试 WebSockets(使用 Pusher)?

如何使用 RSpec 测试 ActionCable 频道?