Frage

Ich habe nicht Djangos und Python integrierte verwendete Funktionen zu testen noch nicht, aber ich will endlich anfangen ... Und einer der offensichtlichsten Dinge, die Ich mag würde während des gesamten Entwicklungsprozesses in Schach zu halten ist, dass alle meine Seiten validieren in allen möglichen Szenarien.

Was der beste Weg, dies zu tun?

War es hilfreich?

Lösung

Gute Frage. Ich habe das nicht selbst getan, so hoffentlich wird es einige bessere Antworten, aber man könnte aussehen wollen in HTML-Validierung Middleware:

„in allen möglichen Szenarien“ könnte zu viel sein, um zu bitten, auf Ihrer Anwendung abhängig. Zum Beispiel, wenn Sie das nächste Facebook zu machen, und akzeptieren somit große Mengen an Benutzerdaten jeden Tag wird etwas kommen, dass irgendwann bricht die Gültigkeit einer Seite auf Ihrer Website.

Als Validierungsfehler nicht dazu neigen, Funktionalität zu zerstören, könnte es ein akzeptabler Ansatz mit einigen begrenzten Testdaten zu überprüfen, reagiert dann zu Fehlern, wie sie kommen. Ich glaube, das bekannt ist als Dummheit getriebenes Testen .

Andere Tipps

Alternativ kann ein Roll-your-own-Ansatz Seiten auf Ihrer Website während der üblichen Einheit Testprozess wie folgt aussehen würde, etwas zu validieren:

  1. Gehen Sie durch Ihre urls.py und erzeugen so viele mögliche URLs für die Website, wie Sie können
  2. Verwenden Sie der eingebaute in Django Test-Client jede dieser URLs holen
  3. Überprüfen sie irgendwie (Siehe vielleicht Validate (X) HTML in Python )

Nicht sicher, ob jemand eine der Arbeit geleistet hat ist eine wiederverwendbare Art und Weise.

Eine Lösung ist, ein Skript zu machen, die auf der Basis eines Eingangs Wörterbuch von Variablen Prüfwerte alle Vorlagen macht.

Die Hauptlogik die Liste der Variablen, die in den Vorlagen ist die folgende Definition abzurufen:

from django.template.loader import get_template

def extract_required_vars(node):
    if not hasattr(node, 'nodelist'):
        return []
    var_names = []
    for child_node in node.nodelist:
        if isinstance(child_node, VariableNode):
            var_names.append(child_node.filter_expression.token)
        elif isinstance(child_node, ForNode):
            var_names.append(child_node.sequence.var.var)
        elif isinstance(child_node, ExtendsNode):
            template = get_template(child_node.parent_name.var)
            var_names.extend(extract_required_vars(template))
        elif isinstance(child_node, IncludeNode):
            template = get_template(child_node.template.var)
            var_names.extend(extract_required_vars(template))
        var_names.extend(extract_required_vars(child_node))
    return var_names

required_vars = extract_required_vars(get_template('index.html'))

Das Skript überprüft dann, dass die Variablen in den Vorlagen definiert sind entweder in den Projekteinstellungen oder in der dict vom Benutzer als Testeingang zur Verfügung gestellt.

/path/to/project/templates/templates/allusers.html
  -> ok: users, STATIC_URL
/path/to/project/templates/entrer-en-contact.html
  -> ok: contactform, STATIC_URL
/path/to/project/templates/dest-summary.html
  -> ok: STATIC_URL
  -> missing: dest_username

Weitere Details in dieser Blog-Post .

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top