【问题标题】:Testing email sending (test pass even without settings and for garbage emails)测试电子邮件发送(测试通过,即使没有设置和垃圾电子邮件)
【发布时间】:2016-05-30 18:03:04
【问题描述】:

我刚刚尝试测试电子邮件的发送。好吧,测试通过了,而我没有在设置中分配任何东西。这被假定为 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')

【问题讨论】:

  • 在发布之前你不能删除那个注释掉的代码吗?
  • @Daniel Roseman,请原谅。这是第二次测试。现在我把它塑造成另一个测试,而不是一个被注释掉的测试。

标签: django


【解决方案1】:

Django 的测试运行程序会自动将测试期间发送的电子邮件重定向到虚假电子邮件后端。

如果您的任何 Django 视图使用 Django 的电子邮件功能发送电子邮件,您可能不想在每次使用该视图运行测试时发送电子邮件。出于这个原因,Django 的测试运行程序会自动将所有 Django 发送的电子邮件重定向到一个虚拟发件箱。这使您可以测试发送电子邮件的各个方面——从发送的消息数量到每条消息的内容——而无需实际发送消息。

来源:Django documentation, Testing tools, Email services

您可以使用mail.outbox 变量来检查您本来要发送的消息是否正确。

在您的示例中,您可以检查 mail.outbox 是否包含一个主题为“Subject here”的 EmailMessage,但运行应用程序中发送电子邮件的部分并对其进行测试会更有意义。

如果您想发送一封实际的电子邮件作为测试的一部分,您可以在connection 参数中将一个真实的后端传递给send_mail

【讨论】:

  • 我确实测试了发件箱。也许我不明白,但我确实准备了 test_send_email_1。此测试通过,而项目肯定无法发送电子邮件。
  • 您的两个测试都只是确认 Django 的虚拟后端有效。如果您想在测试中发送一封真实的电子邮件(您可能不会!),您可以使用不同的后端。如果您想调试应用程序无法发送电子邮件的原因,请仔细检查您的配置,从您的实际应用程序发送电子邮件并从那里开始工作。
  • 谢谢。我会尝试更改后端。虽然我不明白为什么我需要确认虚拟后端工作正常。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-10-17
  • 1970-01-01
  • 2015-03-27
  • 1970-01-01
  • 1970-01-01
  • 2017-03-29
相关资源
最近更新 更多