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:
- L'unità verifica il modello
Foo
per affermare che la logica aziendale è implementata.
- Il test unitario
FooForm
per affermare form.is_valid()
sta restituendo i risultati previsti per gli input forniti direttamente dai test.
- 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.