LondonGuy
LondonGuy

Reputation: 11098

Trying to test sending of email in rSpec but ActionMailer::Base.deliveries.empty? is true

I have no idea why it's not working. After hours of trying to figure this out I wrote a small test to check if the ActionMailer::Base.deliveries was empty and it was.

When I test my reset form it works and mail is sent but when I run test it doesn't seem to store anything in the array.

require 'spec_helper'

describe "Passwords" do
  describe "reset password" do
    it "emails user when requesting password reset" do

        visit login_path
        click_link "Forgot Password?"
        response.should render_template "passwords/new"
        response.should have_selector :h1, :content => "Reset Password"
        fill_in "password_reset[email]", :with => "[email protected]"

        click_button "Reset Password"

        response.should render_template "users/new"
        response.should have_selector :div, :id => "flash_notice", :content => "Email sent with password reset instructions."


         ActionMailer::Base.deliveries.empty?.should be_true
 #       mail = ActionMailer::Base.deliveries.last


    end
  end
end

Upvotes: 2

Views: 1735

Answers (2)

LondonGuy
LondonGuy

Reputation: 11098

I always seem to do silly things like this:

Because I created the passwords_spec file manually and not using the rspec generator I forgot to add "require 'spec_helper'" at the top of the file. Something that the generator would have done automatically.

The last few days I have been figuring out my silly mistakes. Funny how all this happened when I got lazy and decided to build my app first then test after. Well I've learnt from my mistake. Test first!

Upvotes: 1

apneadiving
apneadiving

Reputation: 115521

Just found out a great gem to test emails with rspec: https://github.com/bmabey/email-spec

Hope it will help.

Upvotes: 2

Related Questions