2012-04-02 46 views
1

我有一個帶有一個數組的方法的ActionMailer,它爲該數組中的每個項目發送一封電子郵件。我想在測試中檢查ActionMailer::Base.deliveries以查看是否發送了正確的電子郵件。首先,我檢查發送的電子郵件數量:ActionMailer :: Base.deliveries有最後一封電子郵件N次

ActionMailer::Base.deliveries.size.should be == my_array.size 

是的,斷言按預期通過。

ActionMailer::Base.deliveries似乎已經發送了最後一封電子郵件的所有克隆。手動測試使我確信ActionMailer::Base.deliveries對我說謊 - 實際上發送了唯一的電子郵件,而不是最後一次發送N次。我不理解什麼嗎?

+0

我在Rails 4中遇到了同樣的問題。我在我的模型中發送了2封郵件,它們確實不同,但是在測試中,我在deliveries數組中收到了2封完全相同的郵件:'''mail(to:@owner .email,主題:t('booking_canceled.action'),template_name:「booking_canceled_to_owner」)。deliver! mail(to:@ booker.email,subject:t('booking_canceled.action'),template_name:「booking_canceled_to_booker」)。deliver!''' – luigi7up 2015-03-29 10:04:56

回答

0

我遇到了這個怪異的行爲太(滑軌3.2.9),並結束了使用這種醜陋的解決方法:

email = mail(:from => options[:from], :to => options[:to], :subject => options[:subject]) do |format| 
    format.text { render :text => options[:text] } 
    end 
    if Rails.env.test? 
    email = Marshal.load(Marshal.dump(email)) 
    end 
    email.deliver 

注意.dup或.clone不起作用 - 。要和。從屬性會仍然是一樣的。

相關問題