私は電子メールの送信をテストしようとしました。 さて、私は設定で何かを割り当てていないが、テストをパスする。これはTDDと仮定された。次のステップは、EMAIL_HOST、EMAIL_PORT、EMAIL_HOST_USER、 EMAIL_HOST_PASSWORD、EMAIL_USE_TLS、DEFAULT_FROM_EMAIL、SERVER_EMAIL。
さて、テストパス。 上記の設定が正しいかどうかを自動的にテストする方法をキャッチすることはできません。
私のテストは以下の通りです。ここでキックをしてくれてありがとう。
from django.test import TestCase
from django.core import mail
from django.core.mail import send_mail
class GeneralTest(TestCase):
def test_send_email(self):
number_of_emails_sent = send_mail("Subject here",
"Here is the message.",
"from@example.com",
["to@example.com"],
fail_silently=False)
self.assertEqual(number_of_emails_sent, 1)
def test_send_email_1(self):
mail.send_mail(
"Subject here", "Here is the message.",
"from@example.com", ["to@example.com"],
fail_silently=False,
)
pdb.set_trace()
self.assertEqual(len(mail.outbox), 1)
self.assertEqual(mail.outbox[0].subject, "Subject here")
回答:
回答№1は2Djangoのテストランナーは、テスト中に送られた電子メールを偽の電子メールバックエンドに自動的にリダイレクトします。
あなたのDjangoビューのいずれかがDjangoの電子メール機能では、そのビューを使用してテストを実行するたびに電子メールを送信したくないことがあります。このため、Djangoのテストランナーは、自動的にすべてのDjangoが送信した電子メールをダミーの送信トレイにリダイレクトします。これにより、実際にメッセージを送信することなく、各メッセージの内容に送信されたメッセージの数から電子メールを送信するあらゆる面をテストできます。
あなたは mail.outbox
あなたが送っていたメッセージが正しいことを確認してください。
あなたの例では、 mail.outbox
"Subject here"の件名を持つEmailMessageが1つ含まれていますが、その代わりに電子メールであるアプリケーションの部分を実行してテストする方が理にかなっています。
テストの一環として実際の電子メールを送信する場合は、実際のバックエンドを connection
の議論 send_mail
.