Sto provando a eseguire i test di unità in Django. Ho il seguente modulo in index.html
:Django render_to_string() ignora {% csrf_token%}
<form method=POST>
{% csrf_token %}
<input name=itemT>
</form>
E sto testando se la vista rendono il modello in modo corretto:
views.py
def homePage(request):
return render(request, 'index.html')
tests.py:
request = HttpRequest()
response = homePage(request)
if response:
response = response.content.decode('UTF-8')
expectedHTML = render_to_string('index.html')
self.assertEqual(response, expectedHTML)
Il response
ha un campo di input nascosto con un token csrf; tuttavia, lo expectedHTML
non esiste (c'è solo una riga vuota al posto di {% csrf_token %}
). Quindi l'asserzione fallisce sempre.
È possibile avere render_to_string()
generare un campo di input csrf? In tal caso, il token di response
corrisponde a quello di expectedHTML
?
Oppure, c'è un modo per ignorare il campo di input in modo che il test possa avere successo?
Forse non è quello che ti serve, ma considera di cambiare il test. È la migliore idea per testare la risposta confrontando l'intero HTML all'interno della pagina del modello? Forse è meglio per te "assertContains" con i campi che devi veramente controllare. – PatNowak
Il test sta solo verificando che 'render' rende un template allo stesso modo di' render_to_string'. Questo non è molto utile, perché ci saranno già dei test in Django per assicurarsi che 'render' e' render_to_string' funzionino. La cosa importante da testare è se la vista sta rendendo il modello corretto (puoi usare ['assertTemplateUsed'] (https://docs.djangoproject.com/en/1.9/topics/testing/tools/#django.test .SimpleTestCase.assertTemplateUsed)), oppure controlla il contenuto specifico nella risposta (usa 'assertContains'). – Alasdair