[rspec-users] [rspec-rails] Mailer tests should be similar to Controller tests

David Chelimsky dchelimsky at gmail.com
Thu Mar 29 11:55:57 UTC 2012

On Mon, Mar 26, 2012 at 7:20 PM, Paulo Luis Franchini Casaretto
<pcasaretto at gmail.com> wrote:
> Hey,
> When I'm testing a controller, I basically test three things.
> Does it assign the variables the view needs?
> Does it render the right template?
> Does it do whatever the action is supposed to do?
> And when testing mailers I feel it should be basically the same.
> Does it assign the variables the view needs?
> Does it render the right template?
> Does it set the right headers?
> I don't want to test the actual mail object, the same way I don't want to
> test the views in controller tests.
> On the other hand, the mail object IS the output of the mailer, so I don't
> know.
> What do you guys think about this?

Seems reasonable, but unlikely to change. Here's why. rspec-rails
provides wrappers around test classes provided by rails. Rails
functional tests support the three questions you pose above, but rails
mailer tests are different. From
http://guides.rubyonrails.org/action_mailer_basics.html: "Testing
mailers normally involves two things: One is that the mail was queued,
and the other one that the email is correct."

To support what you'd like to see in mailer specs, rspec-rails would
have to provide it's own ExampleGroup (rather than wrap the rails
class), which would have to be tightly bound to rails' internals. I
took great pains in rspec-rails-2 to constrain coupling to public
APIs, and this has had a big payoff: we've only had one case where a
rails 3.x release required a release of rspec-rails (i.e. there was a
breaking change). With rails-2, pretty much every release broke
rspec-rails because rspec-rails was tied to internals (rspec-rails'
fault, not rails).

If you really want to see this change, you'll need to get it changed
in rails itself, at which point rspec-rails will happily wrap the new
and improved MailerTestCase.


More information about the rspec-users mailing list