2009/3/18 Rick DeNatale <rick.denat...@gmail.com>: > 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 = "somewh...@over.the.rainbow", > :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 > rspec-users@rubyforge.org > http://rubyforge.org/mailman/listinfo/rspec-users > -- Zach Dennis http://www.continuousthinking.com http://www.mutuallyhuman.com _______________________________________________ rspec-users mailing list rspec-users@rubyforge.org http://rubyforge.org/mailman/listinfo/rspec-users