Domanda

Non ho usato Django e Python di incorporato in fase di test ancora capacità, ma voglio iniziare finalmente ... E una delle cose più evidenti che mi piacerebbe tenere sotto controllo durante l'intero processo di sviluppo è che tutti le mie pagine convalidano in tutti gli scenari possibili.

Qual è il modo migliore per fare questo?

È stato utile?

Soluzione

Buona domanda. Non ho fatto io stesso, quindi speriamo che ci saranno alcune risposte migliori, ma si potrebbe desiderare di guardare in HTML convalida middleware:

“in tutti gli scenari possibili” potrebbe essere troppo da chiedere, a seconda della vostra applicazione. Per esempio, se si effettua il prossimo Facebook, e state accettando in tal modo enormi quantità di dati degli utenti ogni giorno, qualcosa verrà a un certo punto che rompe la validità di una pagina del tuo sito.

Come gli errori di convalida non tendono a distruggere la funzionalità, potrebbe essere un approccio accettabile per controllare con alcuni dati di test limitati, quindi reagire a errori come si presentano. Credo che questo è noto come stupidità-driven test .

Altri suggerimenti

In alternativa, un approccio roll-your-own per convalidare le pagine del tuo sito durante il consueto processo di test unità sarebbe simile a questa:

  1. Vai attraverso il vostro urls.py e generare il maggior numero possibile di URL per il sito, come si può
  2. il built-in client di prova Django a prendere ciascuno di tali URL
  3. Convalida loro in qualche modo (vedere forse Convalida (X) HTML in Python )

Non so se qualcuno ha fatto alcun lavoro su questo è un modo riutilizzabile.

Una soluzione è quella di fare uno script che rende tutti i modelli basati su un dizionario di input di valori variabili di test.

La logica principale per recuperare l'elenco delle variabili definite nei modelli è il seguente:

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'))

Lo script quindi verifica che le variabili definite nei modelli sono sia nelle impostazioni del progetto o nel dict fornito dall'utente come input di prova.

/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

in questo post del blog .

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top