Seite 1 von 1

[Django] HTML code im unittest überprüfen...

Verfasst: Freitag 8. Juli 2011, 14:43
von jens
Ich möchte gern in unittests überprüfen, ob bestimmte forms elemente im response.content ist. Also z.B.:

Code: Alles auswählen

self.assertContains(response, '<textarea cols="40" id="id_content" name="content" rows="10">')
Das Problem ist allerdings, das die Attribute (also: cols="40" id="id_content" name="content" rows="10") durch ein dict gebildet werden. Also steht die Reihenfolge nicht immer fest.

Wie also das ganze im Unittest machen???

Eine Änderung in Django und die Attribute werden immer sortiert ausgegeben: https://gist.github.com/976467

Hab auch mal einen Monkeypatch z.B. bei TestRunner.setup_test_environment() probiert und an einigen anderen Stellen auch... Allerdings wird immer die original Django Methode genommen. Keine Ahnung warum...


Wie macht ihr es in euren unitests?

Re: [Django] HTML code im unittest überprüfen...

Verfasst: Freitag 8. Juli 2011, 16:35
von Dauerbaustelle

Re: [Django] HTML code im unittest überprüfen...

Verfasst: Freitag 8. Juli 2011, 17:06
von jens
Stimmt. Das scheint die einzige Möglichkeit zu sein.

Das soll auch gehen:

Code: Alles auswählen

content = parse_html(response.content)
mysnippet = parse_html('<textarea cols="40" id="id_content" name="content" rows="10">')
self.assertTrue(mysnippet in content)
Mich wundert es nur ein wenig. Schreiben so wenige Leute unittest oder überprüft keiner das Vorhandensein von irgendwelchen widgets?

btw. Es soll ein Ticket dafür geben. Ich hab's aber nicht gefunden...

Re: [Django] HTML code im unittest überprüfen...

Verfasst: Freitag 8. Juli 2011, 19:40
von lunar
@jens: Wieso parst Du das Dokument nicht einfach und testest anschießend auf das Vorhandensein bestimmter Knoten im Dokumentbaum? Mit pyquery und lxml ist das auch nicht komplizierter als ein Textvergleich.

Re: [Django] HTML code im unittest überprüfen...

Verfasst: Samstag 9. Juli 2011, 17:14
von jens
Das ist ja fast das was Gregor Müllegger in seinem GSOC-Branch macht...

Ich werde mir das mal bei Zeiten ansehen und evtl. in django-tools übernehmen...