Cosa e come testare un'unità un'applicazione web django?

4

Sto scrivendo unit test per un frontend web implementato in Django. Ho scritto dei test unitari per verificare che tutte le viste restituiscano il codice di stato corretto (200, 302 ecc.) In modo che vengano trovati errori del modello (che danno 500). Faccio anche la convalida HTML con tidylib .

Che altro c'è che dovrei (o posso ) fare?

I modelli sono testati altrove, le forme hanno dipendenze (vale a dire sui modelli) quindi c'è un modo per testarli unitamente - in caso generale lì è qualcosa che si può fare , ma cosa posso fare (senza uno sforzo enorme) facendo leva su Framework per test unità Django / python ?

    
posta Kimvais 30.04.2012 - 08:54
fonte

1 risposta

2

Se si osservano le triadi Modello-Modello-Vista, ogni componente distinto e qualsiasi componente intermedio intermedio possono essere testati separatamente. Supponiamo di avere un modello Foo e di aggiungere controller per il comportamento CRUD in modo semplice e diretto:

  1. L'unità verifica il modello Foo per affermare che la logica aziendale è implementata.
  2. Il test unitario FooForm per affermare form.is_valid() sta restituendo i risultati previsti per gli input forniti direttamente dai test.
  3. Devi solo affermare che le viste CRUD basate sulla classe funzionano rispettivamente con il modello Foo e FooForm .

In generale, non si verificano test di frontend estesi nei progetti di Django, specialmente quelli che utilizzano la classe -based views e unit test le viste direttamente, non vedrai alcun assertContains / assertNotContains test, anche se LiveServerTestCase cambierà un po ', almeno quando si tratta di asserire comportamenti per i progetti che non stanno già scrivendo i test JavaScript in uno dei test quadri.

È come se avessi il tuo cappello back-end quando la tua unità di scrittura testa. Se si desidera aggiungere un messaggio di successo alle viste CUD, si asserisce che un messaggio a livello di successo è stato aggiunto all'elenco dei messaggi dell'utente dopo una richiesta andata a buon fine, ma non ti importa se quel messaggio è una parte di la risposta o no. Analogamente, testiamo che il contesto sia popolato con gli oggetti Foo corretti per una richiesta, ma non ci interessa se e come vengono visualizzati.

Ed è qui che entra in gioco Lettuce , soprattutto se si desidera testare il comportamento dell'applicazione dal punto di vista dell'utente. È opportuno lavorare con il contenuto di un oggetto risposta e ignorare le implementazioni sottostanti che hanno prodotto la risposta. Qui non ti interessa se esiste un messaggio a livello di successo associato a un utente, devi solo assicurarti che sia presente nella risposta e non ti interesserà se gli oggetti Foo appropriati sono nel contesto, vorrete affermare che il loro contenuto è presente nella risposta.

    
risposta data 30.04.2012 - 11:25
fonte

Leggi altre domande sui tag