Hi Rick, Could you paste us what your after_save and your deliver_xyz methods look like? I think it would be helpful to make the discussion more concrete.
I've found that whenever my code is hard to spec, it's usually poorly designed in the first place, and a better split of responsibilities helps make the code both clearer and easily spec'ed. In this specific case, I'm a bit perplexed that you're sending a pre- generated body/subject/sender/etc to the Mailer. Shouldn't that code be in the Mailer's deliver_xyz method? E.g., from my own code: ## password_change_observer.rb class PasswordChangeObserver < ActiveRecord::Observer observe User def after_update(user) if user.password_modified? UserMailer.deliver_new_password(user) end end end ## user_mailer.rb class UserMailer < ActionMailer::Base def new_password(user) @subject = 'Your new password' @body = {"user" => user} @recipients = user.email @sent_on = Time.now @from = MAIL_FROM end end ##new_password.erb Dear user, You have just updated your password. This is a reminder, so that you don't forget it. Your username (email) is: <%= @user.email %> Your password is: <%= @user.password %> If you lose this email and forget your password, don't worry - you can get a new password generated by going to http://<%= SERVER_NAME %>/forgot_password/<%= @user.id %>"> and entering your email. Thanks, The Team #### I'm a bit confused because your code seems to say: msg_creation_parms = { :subject => "Subj", :body => "hi", :sender => people(:rick), :recipient => people(:john) } SantasMailbox.should_receive(:deliver_secret_santa).with(Message.new (msg_creation_parms)) Which would imply you're building the subject, body, sender and recipient before passing things on to the mailer? Maybe I got this all wrong though... Daniel On 13 Dec 2007, at 13:43 13 Dec 2007, Rick DeNatale wrote: > On 12/13/07, Daniel Tenner <[EMAIL PROTECTED]> wrote: >> Hi Rick, >> >> I'm probably a heretic on this point, but I would test >> that :deliver_xyz is being called but not specify what parameters >> it's called with. >> >> What's my reasoning? >> >> - What I'm really testing in the Message spec is not the validity of >> the email that's being sent, but the fact that an email is being >> sent. Basically, I think the Mailer is a different tier. > > I'm not testing the validity of the email, but. > > In this case the email which gets send depends largely on what's in > the message object. The mailer extracts attributes from the object to > create the email, so it's crucial that the correct message is passed > and that's what I'm trying to spec. > > The actual contents of the message are specified in tests against the > mailer as I indicated in my earlier reply to Pat. > > -- > Rick DeNatale > > My blog on Ruby > http://talklikeaduck.denhaven2.com/ > _______________________________________________ > rspec-users mailing list > rspec-users@rubyforge.org > http://rubyforge.org/mailman/listinfo/rspec-users _______________________________________________ rspec-users mailing list rspec-users@rubyforge.org http://rubyforge.org/mailman/listinfo/rspec-users