Djangoでemail送信をテストする
先日、gmailを使ってdjangoからemailを送信する設定なんかを調べました。
今日は関連して「view関数などでemail送信している場合、ユニットテストを実行するたびに送信されてしまうのか?」と思ったので調べてみました。
結論を先に書きますと、python manage.py test でテスト実行している場合、django.core.mailでのメール送信は実行されません。
以下がテストのサンプルになります。
from django.core import mail from django.test import TestCase class EmailTest(TestCase): def test_send_email(self): # メッセージ送信 mail.send_mail(u'指原莉乃、移籍はHKTがかわいそう?! /あなたの愛車、今いくら?', u'ながーい本文', 'from@example.com', ['to@example.com'], fail_silently=False) # メッセージが1つ送信されたこと self.assertEqual(len(mail.outbox), 1) # メッセージのタイトルが正しいこと self.assertEqual(mail.outbox[0].subject, u'指原莉乃、移籍はHKTがかわいそう?! /あなたの愛車、今いくら?')
django.core.mail.outboxが送信されるメールを保持し、実際には送信されません。
送信内容の確認はoutboxをチェックします。
ちなみに、outboxはテスト実行時に動的に追加されるプロパティなので、上記テストコードをpycharmなどで編集していると、「Cannot find reference」みたいな警告がでたりします。
気にせず実行しましょう。