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.
* 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>