/ /電子メール送信のテスト(設定なしでもゴミメール用のテストパスでも) - django

電子メールの送信をテストする(設定なしでもゴミの電子メールでもテストパス) - django

私は電子メールの送信をテストしようとしました。 さて、私は設定で何かを割り当てていないが、テストをパスする。これは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は2

Djangoのテストランナーは、テスト中に送られた電子メールを偽の電子メールバックエンドに自動的にリダイレクトします。

あなたのDjangoビューのいずれかがDjangoの電子メール機能では、そのビューを使用してテストを実行するたびに電子メールを送信したくないことがあります。このため、Djangoのテストランナーは、自動的にすべてのDjangoが送信した電子メールをダミーの送信トレイにリダイレクトします。これにより、実際にメッセージを送信することなく、各メッセージの内容に送信されたメッセージの数から電子メールを送信するあらゆる面をテストできます。

ソース: Djangoのドキュメント、テストツール、電子メールサービス

あなたは mail.outbox あなたが送っていたメッセージが正しいことを確認してください。

あなたの例では、 mail.outbox "Subject here"の件名を持つEmailMessageが1つ含まれていますが、その代わりに電子メールであるアプリケーションの部分を実行してテストする方が理にかなっています。

テストの一環として実際の電子メールを送信する場合は、実際のバックエンドを connection の議論 send_mail.