2012-12-29 4 views
4

J'écris des tests rspec et je remarque qu'il ralentit lors de l'accès à ma classe Mailer. Existe-t-il un moyen de masquer complètement la classe ActionMailer :: Base afin que je puisse tester d'autres composants de mon contrôleur avant et après la distribution du courrier électronique?rspec se moquant ActionMailer

Voici ma définition de classe mailer

class OrganisationMailer < ActionMailer::Base 
# code to send emails 
end 

Voici l'un des tests que j'ai écrit

require 'spec_helper' 

describe OrganisationsController do 

    describe "#email_single" do 
    context "With email address" do 
     let(:org) {Organisation.make!} 

     it "redirects to listing" do 
     get :email_single, :id => org.id 
     response.should redirect_to(organisations_path) 
     end 
    end 
    end 
end 

Répondre

1

Il est difficile de répondre avec le petit extrait que vous avez inclus, mais vous devrait être en mesure de remplacer tous les messages que votre contrôleur envoie à OrganisationMailer afin qu'ils soient non-ops dans les exemples rspec où vous ne vous souciez pas d'exercer cette logique.

Alternativement, vous pouvez envisager de remplacer OrganisationMailer avec un double test en utilisant stub_const:

stub_const("OrganisationMailer", my_test_double) 

Ensuite, vous pouvez contrôler complètement l'interaction entre le contrôleur et le logiciel de messagerie.

Questions connexes