How to test the content of Django emails?… here is a solution to the problem.
How to test the content of Django emails?
I’m new to Django and I’m trying to check if there’s some text in the outbound email using unittest
:
class test_send_daily_email(TestCase):
def test_success(self):
self.assertIn(mail.outbox[0].body, "My email's contents")
However, I’m having problems with mail.outbox[0].body.
It will output \nMy email's contents\n
and will not match the test text.
I tried several different fixes but none of them worked :
str(mail.outbox[0].body).rstrip()
– Returns an identical stringstr(mail.outbox[0].body).decode('utf-8')
– attribute-free decoding
Sorry, I know this must be a trivial task. In Rails, I use something like Nokogiri to parse text. What is the correct way to parse this in Django? I can’t find instructions for this in the documentation
Solution
This depends on the actual content of your message (plain text or HTML), but the easy way to do this is to also encode the string you want to test.
# if you are testing HTML content
self.assertTextInHTML("My email's contents", mail.outbox[0].body)
# the string may need escaping the same way django escapes
from django.utils.html import escape
self.assertIn(escape("My email's contents"), mail.outbox[0].body)