gpt4 book ai didi

python - 如何在 Django 中测试 send_mail?

转载 作者:太空狗 更新时间:2023-10-29 21:36:40 25 4
gpt4 key购买 nike

使用 Django 1.7 和 Python 2.7。

我想测试邮件是否发送成功,邮件内容是否正确。

我试过使用 django.core.mail 中的发件箱,但无济于事。我也可以只获取 stdout(因为我可以在运行测试时在控制台中看到邮件)吗?

模型.py

class User(AbstractBaseUser, PermissionsMixin):
USERNAME_FIELD = 'email'

email = models.EmailField(max_length=255, unique=True)
is_staff = models.BooleanField(default=False)
org = models.ForeignKey('Org', null=True, blank=True,
on_delete=models.SET_NULL)

def __unicode__(self):
return self.email

@staticmethod
def send_password_token(email):
user = get_object_or_404(User, email=email)
token = Token.objects.get(user=user)
message_body = 'Your password reset token:\n\n\t%s' % token.key
send_mail('Password reset:', message_body,
settings.FROM_EMAIL, [email], fail_silently=False)

测试.py

class UserModelTest(TestCase):
def setUp(self):
self.user = User.objects.create_user(email='user@info.com',
password='0000')

@override_settings(EMAIL_BACKEND = 'django.core.mail.backends.console.EmailBackend')
def test_send_password_token(self):
"""
Sends a password reset mail with users authentication token.
"""
token = Token.objects.get(user=self.user)
User.send_password_token(self.user.email)

最佳答案

感谢@Alasdair 提供的解决方案。事实证明这很简单。只需删除 override_settings 并导入发件箱。

测试.py

from django.core.mail import outbox

class UserModelTest(TestCase):
def setUp(self):
self.user = User.objects.create_user(email='user@info.com',
password='0000')

def test_send_password_token(self):
"""
Sends a password reset mail with users authentication token.
"""
token = Token.objects.get(user=self.user)
User.send_password_token(self.user.email)
self.assertEqual(len(outbox), 1)
self.assertEqual(outbox[0].subject, 'Password reset:')
self.assertEqual(outbox[0].from_email, <insert_from_email>)
self.assertEqual(outbox[0].to, [<insert_list_of_to_emails>])
self.assertEqual(outbox[0].body,
'Your password reset token:\n\n\t%s' % token.key)

关于python - 如何在 Django 中测试 send_mail?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35364161/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com