Opened 10 years ago

Last modified 8 years ago

#24112 closed Bug

Inconsistency in TestCase.assertInHTML — at Initial Version

Reported by: Andrew Plummer Owned by: nobody
Component: Testing framework Version: dev
Severity: Normal Keywords:
Cc: Triage Stage: Accepted
Has patch: yes Needs documentation: no
Needs tests: no Patch needs improvement: no
Easy pickings: no UI/UX: no

Description

assertInHTML(needle, haystack) has the following behaviour

assertInHTML('<p>a</p>', '<div><p>a</p><p>b</p></div>') passes: clearly correct

assertInHTML('<p>a</p><p>b</p>', '<p>a</p><p>b</p>') passes: possibly correct

assertInHTML('<p>a</p><p>b</p>', '<div><p>a</p><p>b</p></div>') fails with an assertion error:

  File ".../django/test/testcases.py", line 673, in assertInHTML
    msg_prefix + "Couldn't find '%s' in response" % needle)
AssertionError: Couldn't find '<p>
a
</p><p>
b
</p>' in response

Which seems wrong. It doesn't handle the case correctly if the needle doesn't have a single top-level element (unless the two bits of html are equivalent). This is down to the _count method of django.test.html.Element

I think this should throw a ValueError if the needle has multiple top level elements. However, this does change existing behaviour for the case where the html fragments are equivalent. An alternative would be to try to correctly handle the count in this case, which is possibly a bit fiddly, and the current implementation appears to make no attempt to do this.

I have a patch for the first case: https://github.com/plumdog/django/commit/bfdfda315ad74d067be52888a236ab7a4aadcf96

Change History (0)

Note: See TracTickets for help on using tickets.
Back to Top