2013-06-05 5 views
3

메일러를 테스트하는 방법에 대한 많은 정보가 있습니다.Rspec - 메일러가 적절한 템플릿을 사용하고 있는지 테스트하는 방법

그러나 메일러가 올바른 템플릿을 사용하고 있는지 확인하기 위해 메일러를 테스트하는 방법에 대한 리소스가 없습니다.

예 : 나는 오타app/views/newsletter_mailer/send_newsletter_to_group.html.erb

class NewsletterMailer < ActionMailer::Base 
    include SendGrid 
    default from: -> { SystemConfiguration.newsletter_from_email } 

    def send_newsletter_to_groups(newsletter_campaign_id, group_ids) 
    newsletter_campaign = NewsletterCampaign.find newsletter_campaign_id 
    emails = Group.where(:id => group_ids).map(&:emails).flatten 
    build_and_send_email(newsletter_campaign, emails) 
    end 
end 

.

require "spec_helper" 

describe NewsletterMailer do 

    before { create(:system_configuration) } 
    let(:newsletter) { create(:newsletter_campaign) } 

    describe '.send_newsletter_to_groups' do 
    before do 
     create(:system_configuration) 
     create_list(:group, 3) 
     create_list(:user, 2, groups: [Group.first], newsletter_subscription: true) 
     create_list(:user, 2, groups: [Group.last], newsletter_subscription: true) 
     create_list(:user, 2, name: "pippo") 
    end 
    let(:group_ids) { Group.pluck(:id) } 
    subject { NewsletterMailer.send_newsletter_to_groups(newsletter.id, group_ids) } 

    its(:to) { should == User.where("name != 'pippo'").map(&:email) } 
    its(:from) { should be_present } 
    its(:subject) { should be_present } 
    end 

end 

을하지만 이메일이 몸에 포함되어 있지 않습니다

나는 내 사양은 아직 통과 send_newsletter_to_group.html.erb 대신 send_newsletter_to_groups.html.erb

을 썼다.

그냥 공백으로 이메일을 보내고, 부분의 이름으로 cuz (send_newsletter_to_group.html.erb)를 입력합니다.

테스트 방법? 메일러에서.

답변

0

나는 이것을 email spec으로 사용합니다.

it "should contain the user's message in the mail body" do 
    @email.should have_body_text(/Jojo Binks/) 
end 

그냥 템플릿의 일부입니다 알고 일부 텍스트를 찾습니다.

+0

작동합니다.하지만 ... 외부 라이브러리를 사용하지 않고 이것을 테스트하는 방법을 알고 있습니까? –

+0

라이브러리없이 테스트하지 않았고 시도하지 않았습니다. 원하는 경우 코드를 파고 어떻게 작동하는지 확인할 수 있습니다. 개인적으로, 필자는 외부 라이브러리를 피하는 순도보다는 그것이 추가하는 가독성을 선호합니다. –