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
> [email protected]
> http://rubyforge.org/mailman/listinfo/rspec-users
_______________________________________________
rspec-users mailing list
[email protected]
http://rubyforge.org/mailman/listinfo/rspec-users