needle (検索したいもの)が HTML タグを含まない文字列の場合、 assertContains の感覚で「needle と一致する文字列が haystack の中にあれば OK」という使い方をしてしまいがちだが、 assertInHTML は HTML の木構造を意識するので「あるはずの文字列が見つからない!」というエラーで頭を抱えることになる。
以下の例のように、 haystack の HTML 構造内で任意の子要素と完全一致するような needle を与えれば OK。
❯ python t.py -v test_not_ok (__main__.InHTMLTestCase) ... FAIL test_ok (__main__.InHTMLTestCase) ... ok test_ok2 (__main__.InHTMLTestCase) ... ok ====================================================================== FAIL: test_not_ok (__main__.InHTMLTestCase) ---------------------------------------------------------------------- Traceback (most recent call last): File "t.py", line 14, in test_not_ok self.assertInHTML('a', '<div>a<br>b</div>') File "/Users/kensuke.nagae/.anyenv/envs/pyenv/versions/3.6.10/lib/python3.6/site-packages/django/test/testcases.py", line 800, in assertInHTML self.assertTrue(real_count != 0, msg_prefix + "Couldn't find '%s' in response" % needle) AssertionError: False is not true : Couldn't find 'a' in response ---------------------------------------------------------------------- Ran 3 tests in 0.053s FAILED (failures=1)
https://docs.djangoproject.com/en/3.1/topics/testing/tools/#django.test.SimpleTestCase.assertInHTML