2009/3/18 Rick DeNatale <[email protected]>:
> I've got a simple ActionMailer::Base subclass:
> class InfoMailer < ActionMailer::Base
>
> def info(user, zip_name)
> recipients user.email
> subject "Requested Info"
> attachment(:content_type => "application/zip",
> :filename => zip_name,
> :body => File.read(zip_name))
> body(:message => "Here is the Info that you Requested")
> end
> end
> I'm trying to spec this
> following http://www.rubytutorials.net/2008/02/26/small-rspec-revelations-actionmailer/
> describe AssetsInfoMailer do
> before(:each) do
> �...@user = mock_model(User,
> :email => @user_email = "[email protected]",
> :full_name => "The Wicked Witch of the West"
> )
> ActionMailer::Base.delivery_method = :test
> ActionMailer::Base.perform_deliveries = true
> ActionMailer::Base.deliveries = []
> end
> describe ".info" do
> before(:each) do
> �...@path = 'xyz.zip'
> �...@attachment_body = 'zip_file_contents'
> File.stub!(:read).and_return(@attachment_body)
> �...@the_mail = AssetsInfoMailer.deliver_info(@user,@path)
> �...@attachments = @the_mail.attachments
> end
>
> it "should have the right body" do
> �...@the_mail.body.should == ""
> end
> end
> The expectation of an empty string is just to see what's actually getting
> returned, the result is:
> 1)
> 'AssetsInfoMailer.info should have the right body' FAILED
> expected: "",
> got: "Attachment: xyz.zip\n" (using ==)
> It's looking like the mail template never got rendered, and body is giving
> me the attachment since it's the only part.
> I've got one other mailer method in that mailer which doesn't contain an
> attachement, and it's body comes out fine.
> I'm not sure what's going on here, and I'd appreciate any
> help/insight/condolences...
>
When sending attachments emails are sent as multipart messages. The
only part being specified is the attachment. The other call to "body"
is being ignored. Try something like:
def info(user, zip_name)
recipients user.email
subject "Requested Info"
attachment(:content_type => "application/zip",
:filename => zip_name,
:body => File.read(zip_name))
part "text/plain" do |p|
p.body(:message => "Here is the Info that you Requested")
end
end
Also when you look at the email you'll have look at its #parts
otherwise @the_mail.body is going to returned the body representation
of each part concatenated.
> --
> Rick DeNatale
>
> Blog: http://talklikeaduck.denhaven2.com/
> Twitter: http://twitter.com/RickDeNatale
> WWR: http://www.workingwithrails.com/person/9021-rick-denatale
> LinkedIn: http://www.linkedin.com/in/rickdenatale
>
> _______________________________________________
> rspec-users mailing list
> [email protected]
> http://rubyforge.org/mailman/listinfo/rspec-users
>
--
Zach Dennis
http://www.continuousthinking.com
http://www.mutuallyhuman.com
_______________________________________________
rspec-users mailing list
[email protected]
http://rubyforge.org/mailman/listinfo/rspec-users