49👍
✅
It looks like you’re working with Python 3 so you’ll need to turn response.content
into a UTF-8 encoded string before passing it to self.assertJSONEqual
:
class AddItemToCollectionTest(TestCase):
def test_success_when_not_added_before(self):
response = self.client.post('/add-item-to-collection')
self.assertEqual(response.status_code, 200)
self.assertJSONEqual(
str(response.content, encoding='utf8'),
{'status': 'success'}
)
If you want to simultaneously support both Python 2.7 and Python 3, use the six
compatibility library that django ships with:
from __future__ import unicode_literals
from django.utils import six
class AddItemToCollectionTest(TestCase):
def test_success_when_not_added_before(self):
response = self.client.post('/add-item-to-collection')
self.assertEqual(response.status_code, 200)
response_content = response.content
if six.PY3:
response_content = str(response_content, encoding='utf8')
self.assertJSONEqual(
response_content,
{'status': 'success'}
)
11👍
Similarly to respondcreate’s solution, you can also use Django’s force_text (available since version 1.5), for a shorter cross-platform solution:
from __future__ import unicode_literals
from django.utils.encoding import force_text
class AddItemToCollectionTest(TestCase):
def test_success_when_not_added_before(self):
response = self.client.post('/add-item-to-collection')
self.assertEqual(response.status_code, 200)
self.assertJSONEqual(force_text(response.content), {'status': 'success'})
- [Django]-What are the best practices for testing "different layers" in Django?
- [Django]-NameError: name '_mysql' is not defined after setting change to mysql
- [Django]-Django Models (1054, "Unknown column in 'field list'")
Source:stackexchange.com