如何使用 django 测试系统测试 EmailMultiAlternatives 对象中的替代正文内容?

Ale*_*ler 7 email django assertions django-testing

我在我的视图中有带有文本和 html 内容的 EmailMultiAlternatives 对象:

email = EmailMultiAlternatives(subject=subject, body=message, from_email=sender, to=recipient)
email.attach_alternative(messageHTML, 'text/html')
Run Code Online (Sandbox Code Playgroud)

当我测试消息正文属性的内容包含文本版本时,我不知道如何断言 html 内容:

self.assertHTMLEqual(mail.outbox[0].body, message) # This test passes
self.assertHTMLEqual(mail.outbox[0].<???>, messageHTML) # But here I don't know what to do
Run Code Online (Sandbox Code Playgroud)

xyr*_*res 5

当您编写 - 时mail.outbox[0],将向您返回一个电子邮件对象,它是EmailMultiAlternatives类的一个实例。它有一个名为的属性alternatives,它是一个替代内容列表。

由于您只附加了 1 个替代内容,因此您可以像这样获取它:

mail.outbox[0].alternatives[0]

# above will return the following tuple:

('<html>...</html>', 'text/html')

# \______________/    \_______/
#        |                |
#   HTML content        mimetype 
Run Code Online (Sandbox Code Playgroud)

要测试消息,您可以执行以下操作:

self.assertHTMLEqual(mail.outbox[0].alternatives[0][0], messageHTML)
Run Code Online (Sandbox Code Playgroud)