Rspec - 如何测试邮件是不是使用正确的模板
Posted
技术标签:
【中文标题】Rspec - 如何测试邮件是不是使用正确的模板【英文标题】:Rspec - How to test if mailer is using proper templateRspec - 如何测试邮件是否使用正确的模板 【发布时间】:2013-06-01 08:29:10 【问题描述】:有很多关于如何测试邮件的信息。
但是我还没有找到任何资源来测试邮件程序以检查他们是否真的使用了正确的模板。
示例:
class NewsletterMailer < ActionMailer::Base
include SendGrid
default from: -> SystemConfiguration.newsletter_from_email
def send_newsletter_to_groups(newsletter_campaign_id, group_ids)
newsletter_campaign = NewsletterCampaign.find newsletter_campaign_id
emails = Group.where(:id => group_ids).map(&:emails).flatten
build_and_send_email(newsletter_campaign, emails)
end
end
app/views/newsletter_mailer/send_newsletter_to_group.html.erb
我有错字。
我写的是send_newsletter_to_group.html.erb
而不是send_newsletter_to_groups.html.erb
我的规范仍然通过:
require "spec_helper"
describe NewsletterMailer do
before create(:system_configuration)
let(:newsletter) create(:newsletter_campaign)
describe '.send_newsletter_to_groups' do
before do
create(:system_configuration)
create_list(:group, 3)
create_list(:user, 2, groups: [Group.first], newsletter_subscription: true)
create_list(:user, 2, groups: [Group.last], newsletter_subscription: true)
create_list(:user, 2, name: "pippo")
end
let(:group_ids) Group.pluck(:id)
subject NewsletterMailer.send_newsletter_to_groups(newsletter.id, group_ids)
its(:to) should == User.where("name != 'pippo'").map(&:email)
its(:from) should be_present
its(:subject) should be_present
end
end
但电子邮件不包含正文。
它只是发送空白电子邮件,因为部分名称 (send_newsletter_to_group.html.erb
) 我打错了。
如何测试这个?在邮件中。
【问题讨论】:
【参考方案1】:我为此使用email spec。
it "should contain the user's message in the mail body" do
@email.should have_body_text(/Jojo Binks/)
end
只需查找一些您知道是模板一部分的文本。
【讨论】:
它可以工作.. 但是.. 你知道如何在不使用外部库的情况下进行测试吗? 我没有在没有库的情况下进行过测试,也没有尝试过,尽管如果你愿意,你可以深入研究代码并了解它是如何工作的。就个人而言,我更喜欢它增加的可读性,而不是避免使用外部库的纯粹性。以上是关于Rspec - 如何测试邮件是不是使用正确的模板的主要内容,如果未能解决你的问题,请参考以下文章