[Django] #34947: assertContains fails when there is unicode in the response json

8 views
Skip to first unread message

Django

unread,
Nov 6, 2023, 9:19:19 AM11/6/23
to django-...@googlegroups.com
#34947: assertContains fails when there is unicode in the response json
-------------------------------------+-------------------------------------
Reporter: | Owner: nobody
ideesnoires |
Type: Bug | Status: new
Component: Testing | Version: 4.2
framework | Keywords: unicode, testing,
Severity: Normal | assertcontains
Triage Stage: | Has patch: 0
Unreviewed |
Needs documentation: 0 | Needs tests: 0
Patch needs improvement: 0 | Easy pickings: 0
UI/UX: 0 |
-------------------------------------+-------------------------------------
{{{
#views.py

class Umlaut(View):
def get(self, request):
return JsonResponse({"uml": "äuuuß"})

#tests.py

class UmlautTest(TestCase):
def test_contains(self):
response = self.client.get('/')
self.assertContains(response, 'ä')

# produces:
======================================================================
FAIL: test_contains (app.tests.UmlautTest.test_contains)
----------------------------------------------------------------------
Traceback (most recent call last):
File "/Users/markus/dev/testcase/p/app/tests.py", line 6, in
test_contains
self.assertContains(response, 'ä')
File "/Users/markus/Library/Caches/pypoetry/virtualenvs/testcase-
H5bBokyv-py3.12/lib/python3.12/site-packages/django/test/testcases.py",
line 660, in assertContains
self.assertTrue(
AssertionError: False is not true : Couldn't find 'ä' in response

----------------------------------------------------------------------
Ran 1 test in 0.002s

FAILED (failures=1)

#but is succesful when checking for 'uuu'
}}}

--
Ticket URL: <https://code.djangoproject.com/ticket/34947>
Django <https://code.djangoproject.com/>
The Web framework for perfectionists with deadlines.

Django

unread,
Nov 6, 2023, 9:54:35 AM11/6/23
to django-...@googlegroups.com
#34947: assertContains fails when there is unicode in the response json
-------------------------------------+-------------------------------------
Reporter: ideesnoires | Owner: nobody
Type: Bug | Status: closed
Component: Testing framework | Version: 4.2
Severity: Normal | Resolution: invalid
Keywords: unicode, testing, | Triage Stage:
assertcontains | Unreviewed
Has patch: 0 | Needs documentation: 0

Needs tests: 0 | Patch needs improvement: 0
Easy pickings: 0 | UI/UX: 0
-------------------------------------+-------------------------------------
Changes (by David Sanders):

* status: new => closed
* resolution: => invalid


Comment:

Hi ideesnoires,

Thanks for your report though, the problem here isn't `assertContains()`,
it's json serialisation in Python:
https://docs.python.org/3/library/json.html#character-encodings

By default json.dumps() sets `ensure_ascii=True`. This should be false for
unicode.

Here's the correct way to respond with unicode:

{{{
def äuuuß(request):
return JsonResponse({"uml": "äuuuß"},
json_dumps_params={"ensure_ascii": False})
}}}

With that your test will pass :)

--
Ticket URL: <https://code.djangoproject.com/ticket/34947#comment:1>

Reply all
Reply to author
Forward
0 new messages