/ / Teste de envio de email (passe de teste mesmo sem configurações e emails de lixo) - django

Testando o envio de e-mail (passe de teste mesmo sem configurações e para e-mails de lixo) - django

Eu apenas tentei testar o envio de e-mails. Bem, passe de teste, enquanto eu não atribui nada nas configurações. Isto foi assumido como sendo TDD. O próximo passo seria a atribuição de EMAIL_HOST, EMAIL_PORT, EMAIL_HOST_USER, EMAIL_HOST_PASSWORD, EMAIL_USE_TLS, DEFAULT_FROM_EMAIL, SERVER_EMAIL.

Bem, o teste passa. Eu não posso pegar como testar automaticamente se as configurações acima mencionadas estão corretas.

Abaixo estão meus testes. Obrigado antecipadamente por um chute aqui.

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")

Respostas:

2 para resposta № 1

O executor de testes do Django redireciona automaticamente os emails enviados durante os testes para um backend de email falso.

Se alguma das suas visualizações do Django enviar e-mail usandoCom a funcionalidade de e-mail do Django, você provavelmente não deseja enviar e-mails toda vez que realizar um teste usando essa visualização. Por esse motivo, o executor de testes do Django redireciona automaticamente todos os e-mails enviados pelo Django para uma caixa de saída fictícia. Isso permite testar todos os aspectos do envio de email - do número de mensagens enviadas ao conteúdo de cada mensagem - sem realmente enviar as mensagens.

Fonte: Documentação do Django, ferramentas de teste, serviços de e-mail

Você pode usar o mail.outbox variável para verificar se as mensagens enviadas de outra forma estão corretas.

No seu exemplo, você pode verificar isso mail.outbox contém um único EmailMessage com um assunto "Assunto aqui", mas faria mais sentido executar a parte do seu aplicativo que envia e-mail e testá-lo.

Se você quiser enviar um e-mail real como parte do seu teste, pode passar um back-end real no connection argumento para send_mail.