编写用于通过API发送邮件的规范

时间:2013-08-23 08:42:50

标签: ruby-on-rails rspec tdd ruby-on-rails-4 bdd

我希望每当生成Invite时,都会使用后台流程发送电子邮件。

我目前拥有的是这种方法:Invite模型的方法send_mail,它使用Mandrill API和gem发送电子邮件。它还使用Resque方法queue_mailInviteMailer方法的邀请ID添加到队列中。

然而......由于我很难为此编写规范,我认为这可能不是发送邮件的最佳方法。

我主要想要并且需要测试:

  • 邮件是否已添加到队列中?
  • InviteMailer是否正常工作?
  • 邮件中是否包含正确的重要信息?

重要信息是:发送给正确的人,包含指向特定网站的链接和一些特定的数据/文本;我也不确定如何让当前主持人加入链接。

我认为这不是一件罕见的事情,所以我想知道最佳做法是什么。

我的测试环境:rspec,capybara,工厂女孩。我已经添加了VCR来缓存API请求。

1 个答案:

答案 0 :(得分:2)

您可以使用Mailcatcher伪造您的邮件服务器,并通过网络API检查收到的邮件:

  

功能

     
      
  • 抓取所有邮件并将其存储以供显示。
  •   
  • 根据情况显示消息的HTML,纯文本和源版本。
  •   
  • 重写HTML,可在新窗口中显示嵌入的内嵌图像/等和打开的链接。 (目前非常基础)
  •   
  • 可以发送HTML以供Fractal分析。
  •   
  • 列出附件并允许单独下载部件。
  •   
  • 下载原始电子邮件以在您的本机邮件客户端中查看。
  •   
  • 用于覆盖默认SMTP / HTTP IP和端口设置的命令行选项。
  •   
  • 如果您的浏览器支持WebSockets,则会立即显示邮件,否则每30秒更新一次。
  •   
  • 收到新邮件时收到Growl通知。
  •   
  • 作为守护程序在后台运行。
  •   
  • Sendmail-analogue命令,catchmail,使得从PHP使用mailcatcher变得更加容易。
  •   
  • 简单地在EventMachine中编写,易于挖掘和更改。
  •   
     

如何

     
      
  1. gem install mailcatcher
  2.   
  3. mailcatcher
  4.   
  5. 转到http://localhost:1080/
  6.   
  7. 通过smtp://localhost:1025
  8. 发送邮件         

    <强> API

         

    相当RESTful的URL架构意味着您可以下载消息列表   在/messages的JSON中,每条消息的元数据都包含在内   /messages/:id.json,然后是相关部分   /messages/:id.html/messages/:id.plain用于默认HTML   和纯文本版本,/messages/:id/:cid个人   CID的附件,或/messages/:id.source的整个邮件。