目前在我的测试中,我做了类似的事情来测试邮箱是否排队等待发送

assert_difference('ActionMailer::Base.deliveries.size', 1) do       
  get :create_from_spreedly, {:user_id => @logged_in_user.id}
end

但是,如果我发现一个控制器操作可以发送两个不同的邮箱,即,如果注册顺利,则发送一个给用户,如果出现问题,则发送一个通知给管理员——我如何测试实际发送了哪一个.不管怎样,上面的代码都会通过.

推荐答案

在测试期间使用ActionMailer时,所有邮件都被放入一个名为deliveries的大数组中.基本上,你要做的(大部分是足够的)是判断数组中是否存在邮箱.

请参阅ActionMailer::Base以了解可用的配置方法,您可以使用这些方法来确定数组中存在哪些邮箱.一些最适合你的方法可能是

  • recipients:获取一个或多个邮箱地址.这些地址是您的邮箱发送到的地址.将标题设置为:header.
  • subject:你邮件的主题.设置主题:标题.

Ruby-on-rails相关问答推荐

Rails 7涡轮框架和多种形式与形式值有关

仅在两个子域间共享Rails cookies,并为所有其他子域使用单独的cookie

复制我的活动时,活动描述没有复制过来

Ruby on Rails 中的多种布局

如何使用 activerecord activerecord-session_store 在 Rails 应用程序中使用 cookie 值在数据库中查找会话记录

在 Rails 中进行 Http 基本身份验证

ViewModel 和 Controller 有什么区别?

设计 token_authenticable 已弃用,有什么替代方案?

带有 simple_form 的按钮内的 HTML 代码

如何在 YAML 中声明带有单引号和双引号的字符串?

如何在 rails 中指定和验证枚举?

升级到设计 3.1 => 获取重置密码令牌无效

在 Controller 中调用模型方法

如何获取包含表的列名的数组

如何使用 Ruby 在现有 PDF 上编辑或书写?

我怎样才能看到水豚在失败的黄瓜步骤中发现了什么?

Ruby on Rails 3:通过 Rails 将数据流式传输到客户端

使用redirect_to后如何停止控制器执行? (使用导轨)

使用连接的 Ruby on Rails ActiveRecord 查询

警告:运行 ruby​​ 或 gem 命令时不安全的世界可写目录