2015-06-16 14 views
9

Ich bin neu in RSpec und TDD und habe Schwierigkeiten beim Schreiben eines RSpec-Tests, um zu testen, ob Devise tatsächlich die Bestätigungs-E-Mail sendet, nachdem sich ein Benutzer angemeldet hat. Ich weiß, dass meine Anwendung wie erwartet funktioniert, da ich die Funktionalität sowohl in der Entwicklung als auch in der Produktion getestet habe. Allerdings muss ich noch den RSpec-Test für diese Funktionalität schreiben und ich kann nicht herausfinden, wie man eine Bestätigungs-E-Mail durch RSpec-Tests sendet.RSpec Test Devise Mailer

factories/user.rb

FactoryGirl.define do 
    factory :user do 
    name "Jack Sparrow" 
    email { Faker::Internet.email } 
    password "helloworld" 
    password_confirmation "helloworld" 
    confirmed_at Time.now 
    end 
end 

spec/models/user_spec.rb

require 'rails_helper' 

RSpec.describe User, type: :model do 

    describe "user sign up" do 
    before do 
     @user = FactoryGirl.create(:user) 
    end 

    it "should save a user" do 
     expect(@user).to be_valid 
    end 

    it "should send the user an email" do 
     expect(ActionMailer::Base.deliveries.count).to eq 1 
    end 
    end 
end 

Warum nicht Überlegen Sie sich eine Bestätigung E-Mail zu senden, nachdem ich @user erstellen? Mein Test gibt ActionMailer :: Base.deliveries.count = 0 zurück. Wie ich schon sagte, bin ich neu bei RSpec und TDD, also fehlt mir hier etwas völlig?

+1

Ich vermute, die E-Mail wird auf der Controller erstellen Aktion gesendet, hier erstellen Sie nur einen neuen Benutzer und erwarten, dass es eine E-Mail senden. So würde ich einen Test für die Controller erstellen Aktion schreiben und einen Post mit einigen Benutzerattributen tun, Mailer sollte aufgerufen werden. – neo

+0

Also müsste ich den Test in 'registrations_controller_spec.rb' schreiben? –

+1

Das ist es, solange die E-Mail von dort gesendet wird – neo

Antwort

4

Devise verwendet seinen eigenen Mailer, also versuchen Sie Devise.mailer.deliveries anstelle von ActionMailer::Base.deliveries, wenn der Test in der richtigen Controller-Datei nicht von selbst funktioniert.

+0

erwarten (Devise.mailer.deliveries.count) .to Eq 1 arbeitete für mich, danke! – rmcsharry

Verwandte Themen