2012-01-13 5 views
2

rspec 테스트를 실행하려고합니다. 그 코드의 대부분은 here입니다. CoRegEmailWorker.perform이 포함되어 있습니다 :ActionMailer :: Base.deliveries 배열이 채워지지 않습니다.

은 어쩌면 관련이

ProvisionalUser.where("unsubscribed = false AND disabled = false AND (email_sent_count < ? OR email_sent_count is NULL) AND (last_email_sent <= ? OR last_email_sent IS NULL) AND sign_up_date IS NULL", 
         ProvisionalUser::EMAIL_COUNT_LIMIT, email_sending_interval.hours.ago). 
       each{ |user| 
    begin 
    user.send_email 
    rescue Exception => ex 
    logger.error ex 
    end 
} 

및 ProvisionalUser이 방법이 있습니다

def send_email 
    self.email_sent_count = self.email_sent_count.nil? ? 1 : self.email_sent_count + 1 
    self.last_email_sent = DateTime.now 
    self.disabled = true if self.email_sent_count == EMAIL_COUNT_LIMIT 
    self.save! 

    ProvisionalUserNotifier.send_registration_invite(self.id).deliver 
    end 

마지막으로, ActionMailer에서 MailGunNotifier에서 ProvisionalUserNotifier 상속을 상속한다.

문제는 배달 배열이 채워지지 않고 있다는 것입니다. 내`config/environments/test.rb '에. 나는 이것을 가지고있다 :

config.action_mailer.perform_deliveries = true 
config.action_mailer.delivery_method = :test 

나는 그 밖의 무엇이 필요한지 명확하지 않다.

심지어 지금까지 시도로 갔어요 :

require "spec_helper" 
require "action_mailer" 

describe "unsubscribe functionality" do 

    pu1 = ProvisionalUser.new 
    pu1.email = '[email protected]' 
    pu1.partner = 'partner' 
    pu1.first_name = 'joe' 
    pu1.save! 

    before(:each) do 
    ActionMailer::Base.delivery_method = :test 
    ActionMailer::Base.perform_deliveries = true 
    ActionMailer::Base.deliveries = [] 
    end 

    it "should send emails to subscribed users only" do 
    unsubscribed_user = FactoryGirl.build(:unsubscribed_user) 
    unsubscribed_user.save! 

    subscribed_user = FactoryGirl.create(:subscribed_user) 
    CoRegEmailWorker.perform 
    ActionMailer::Base.deliveries.length.should == 1 
    ActionMailer::Base.deliveries.first.email.should =~ subscribed_user.email 
    #sent.first.email.should_not =~ unsubscribed_user.email 
    #sent.first.email.should =~ subscribed_user.email 
    end 

    def sent 
    ActionMailer::Base.deliveries 
    end 

end 
+0

이메일을 보내려는 비트는 어디에서 왔습니까? –

+0

내 업데이트를 참조하십시오. 그러나 기본적으로'CoRegEmailWorker.perform'은'ProvisionalUserNotifier.deliver'를 호출하는'ProvisionalUser'에서'user.send_email'을 호출합니다. 'ProvisionalUserNotifier'는'ActionMailer'에서 상속받은'MailGunNotifier'를 상속받습니다. – Ramy

+0

'rescue Exception' 블록의 로그 파일에있는 내용은 무엇입니까? (나는 문법 오류와 같은 것들을 잡을 것이기 때문에 아주 위험하다고 생각한다) –

답변

0

와우. 그게 정말 짜증나. 예외가 먹혀 들기 때문에 나는 이메일 주제에 대한 필연적 인 가치가 실종되었다는 것을 알지 못했다.

관련 문제