我有一个带有电子邮件表单的 Django 视图。它允许用户键入主题和消息,并将其作为电子邮件发送给站点管理员。我想编写一个单元测试,以确保该视图可以捕获BadHeaderError。
subject = contact_form.cleaned_data['subject']
message = contact_form.cleaned_data['message']
try:
mail_admins(
subject=subject,
message=message,
)
except BadHeaderError:
# I want to test this case.
messages.error(request, "Sorry, the email could not be sent. An invalid header was found.")
else:
messages.success(request, "Your email was sent to the admins.")
如何在单元测试中触发 BadHeaderError?
我知道标头注入的典型示例是在主题中有换行符。但是,我编写了一个单元测试,在主题中使用换行符填写此表单,并且它没有触发无效的标题消息。
# This didn't trigger the invalid header message. So how do I do it?
response = self.client.post(reverse('contact_us'), dict(
subject="Subject goes here\ncc:spamvictim@example.com",
message="Message goes here",
))
编辑:
Hassek 关于使用 Mocker 的建议是我最初没有考虑过的一种方法,并且在这里可以达到我的目的。但是,我很好奇邮件函数中实际触发 BadHeaderError 的原因 - 如果换行符不这样做,主题中需要什么样的特殊字符?还是有另一种触发 BadHeaderError 的方法?我对网络安全不太了解,所以我想学习这些东西。
编辑2:
我使用的是 Django 1.3.0。