在 Rails 中,为啥我的邮件正文只在我的测试中是空的?

Posted

技术标签:

【中文标题】在 Rails 中,为啥我的邮件正文只在我的测试中是空的?【英文标题】:In Rails why is my mail body empty only in my test?在 Rails 中,为什么我的邮件正文只在我的测试中是空的? 【发布时间】:2015-06-09 20:05:28 【问题描述】:

我有一个 actionmailer 类和相关的开销,它运行良好。但是,在我的单元测试(rails 默认 minitest)中,电子邮件正文为空。这是为什么呢?

我的邮件类:

class TermsMailer < ApplicationMailer
  default from: "info@domain.com"
  def notice_email(user,filename)
    @user = user
    @file = filename
    mail(to: "info@domain.com", subject: 'Data downloaded')
  end
end

我的测试:

require 'test_helper'

class TermsMailerTest < ActionMailer::TestCase
  test "notice" do
    email = TermsMailer.notice_email(users(:me),'file.ext').deliver_now
    assert_not ActionMailer::Base.deliveries.empty?
    assert_equal ['info@domain.com'], email.from
    assert_equal ['info@domain.com'], email.to
    assert_equal 'Data downloaded', email.subject
    assert_equal 'arbitrary garbage for comparison', email.body.to_s
  end
end

这个邮件的视图不是空白的,正确的内容实际上是在电子邮件中发送的。那么为什么在我的测试中邮件正文是空白的呢?

【问题讨论】:

使用email.body.encoded。我会将其发布为答案,但我不记得为什么我必须进行更改。 【参考方案1】:

您可能有两个版本的电子邮件模板(text.erbhtml.erb)。

如果是这样,您可以将email.text_part.body.to_s 用于纯文本电子邮件,将email.html_part.body.to_s 用于HTML 版本。

【讨论】:

你在哪里做这个?我使用邮件生成器时没有生成布局,所以我不知道它应该是什么样子

以上是关于在 Rails 中,为啥我的邮件正文只在我的测试中是空的?的主要内容,如果未能解决你的问题,请参考以下文章

为啥我的实例变量在我的 Rails 视图中总是 Nil

Rails - 你如何测试 ActionMailer 在测试中发送了特定的电子邮件

在邮件正文中插入换行符

Rails - SendGrid - 无效响应错误

为啥 jQuery 在我的 rails 5 应用程序中不起作用?

为啥 datatables.net 在我的 Rails 开发环境中可以工作,但在部署到 Heroku 时却不行?