Rails - How do you test ActionMailer sent a specific email in tests

后端 未结 7 2023
面向向阳花
面向向阳花 2020-12-23 12:58

Currently in my tests I do something like this to test if an email is queued to be sent

assert_difference(\'ActionMailer::Base.deliveries.size\', 1) do              


        
7条回答
  •  粉色の甜心
    2020-12-23 13:19

    As of rails 3 ActionMailer::Base.deliveries is an array of Mail::Message's. From the mail documentation:

    #  mail['from'] = 'mikel@test.lindsaar.net'
    #  mail[:to]    = 'you@test.lindsaar.net'
    #  mail.subject 'This is a test email'
    #  mail.body    = 'This is a body'
    # 
    #  mail.to_s #=> "From: mikel@test.lindsaar.net\r\nTo: you@...
    

    From that it should be easy to test your mail's in an integration

    mail = ActionMailer::Base.deliveries.last
    
    assert_equal 'mikel@test.lindsaar.net', mail['from'].to_s
    
    assert_equal 'you@test.lindsaar.net', mail['to'].to_s
    

提交回复
热议问题