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 have integration tests that ensure that the system is working as a whole. If the params are wrong in a business-meaningful way, those should tell me what's wrong Possibly most important point: - How is this piece of code likely to break? The most likely way that this code would break would be if I change the mailer method so that it requires different parameters. Will the spec the way you're attempting to write it catch that? Nope. Only the integration test will catch that. What will you catch by specifying the exact parameters that the mailer is called with, then? Not much - typos in the after_create callback, perhaps. As it happens, that would also be caught by the integration test. I like to focus my speccing effort on where the errors are likely to occur. As such, my approach would be to simplify the spec to: describe Message, "from anyone" do it "should send an email on save" do msg_creation_parms = { :subject => "Subj", :body => "hi", :sender => people(:rick), :recipient => people(:john) } SantasMailbox.should_receive(:deliver_secret_santa) Message.create(msg_creation_parms) end end But, as I said, I'm probably a heretic :-) Others will probably disagree violently (and they'll probably be right). I hope this helps, Daniel PS: If I decided that the mailer is actually the same tier as the model that's calling it, then I would not mock any of it, and do what Pat suggested. However, at the moment, I tend to see mailing as a separate tier from BL/CRUD. On 13 Dec 2007, at 12:57 13 Dec 2007, Rick DeNatale wrote: > On 12/12/07, Pat Maddox <[EMAIL PROTECTED]> wrote: > >> I would not mock the call, and would instead just let the mailer do >> its thing. You can verify that a message was sent, match the >> subject/content, etc. It's very lightweight so there's no reason not >> to use it. > > The problem with this is that it combines testing the sending of the > message with testing how it's rendered. > > I prefer to do the latter in the context of testing the mailer. > > -- > 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