如何在Django测试send_mail?

2024-05-26 17:44:34 发布

您现在位置:Python中文网/ 问答频道 /正文

使用django1.7和python2.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在

^{pr2}$

Tags: pyselftokensendfalsetruegetmodels
1条回答
网友
1楼 · 发布于 2024-05-26 17:44:34

感谢@Alasdair提供的解决方案。结果很简单。只需删除覆盖设置并导入发件箱。在

在测试.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)

相关问题 更多 >

    热门问题