Hi, Email notifications are an important part of my app and I would like to spec them. Here''s what I have going so far. It seems to work. I''d appreciate comments/suggestions. Rails script/generate mailer produces tests for the email contents etc. I''ve started by manually converting the generated unit tests to rspec, and then changing/adding examples as I implement the emails. In this scenario, an AdminNotify message is sent when a create action of PagesController class completes. ----------------- app/models/admin_notify.rb : class AdminNotify < ActionMailer::Base def itemcreated(item, sent_at = Time.now) @subject = ''MySite: itemcreated'' @body = { :item => item } @recipients = ''admin at gmail.com'' @from = ''mysite at gmail.com'' @sent_on = sent_at @sent_on = sent_at @headers = {} end ----------------- app/views/admin_notify/itemcreated.text.html.erb : <p><b>AdminNotify#itemcreated</b></p> <p>A new item was created</p> <p>Class: <%= @item.class %><br /> Name: <%= @item.name %></p> ----------------- spec/fixtures/admin_notify/itemcreated : <p><b>AdminNotify#itemcreated</b></p> <p>A new item was created</p> <p>Class: SitePage<br /> Name: asdfasdf</p> ----------------- spec/models/admin_notify_spec.rb : require File.dirname(__FILE__) + ''/../spec_helper'' FIXTURES_PATH = File.dirname(__FILE__) + ''/../fixtures'' CHARSET = "utf-8" include ActionMailer::Quoting describe AdminNotify do before(:each) do ActionMailer::Base.delivery_method = :test ActionMailer::Base.perform_deliveries = true ActionMailer::Base.deliveries = [] @item = SitePage.new( :name => ''asdfasdf'') @item.save! @expected = TMail::Mail.new @expected.set_content_type "text", "plain", { "charset" => CHARSET } #@expected.set_content_type "multipart", "alternative", { "charset" => CHARSET } @expected.mime_version = ''1.0'' @expected.from = ''jonathan at linowes.com'' @expected.to = ''linojon at gmail.com'' end it "should generate correct ''create notify'' message" do @expected.subject = ''ReviewRamp: itemcreated'' @expected.body = read_fixture(''itemcreated'') @expected.date = Time.now # (asserting mimeparts is too hard ) #@expected.encoded.should == AdminNotify.create_itemcreated (@item, at expected.date).encoded # just check contents part of message response = AdminNotify.create_itemcreated(@item, at expected.date) do_check_email_response(@expected, response) end end def read_fixture(action) IO.readlines("#{FIXTURES_PATH}/admin_notify/#{action}") end def encode(subject) quoted_printable(subject, CHARSET) end def do_check_email_response(expected, response) response.date.should == expected.date response.from.should == expected.from response.to.should == expected.to response.subject.should == @expected.subject response.body.should == @expected.body end #end of admin_notify_spec.rb