Ich konnte dieses Problem im IRC nicht lösen, in der Hoffnung, dass ich hier eine Anleitung finden könnte. Ich habe folgenden Test:Unit Testing Bootstrap Modal Redirect
def test_validation_errors_return_hops_list_page(self):
response = self.client.post(
'/beerdb/add/hops',
data={
'name': '',
'min_alpha_acid': '',
'max_alpha_acid': '',
'country': '',
'comments': ''
}, follow=True
)
self.assertEqual(response.status_code, 200)
self.assertTemplateUsed(response, 'homebrewdatabase/addhops.html')
name_validation_error = escape("A hop name is required")
min_alpha_acid_error = escape("You must enter a min alpha acid")
max_alpha_acid_error = escape("You must enter a max alpha acid")
country_error = escape("You must enter a country")
comments_error = escape("You must enter a comment")
self.assertContains(response, name_validation_error)
self.assertContains(response, min_alpha_acid_error)
self.assertContains(response, max_alpha_acid_error)
self.assertContains(response,country_error)
self.assertContains(response, comments_error)
Es fällt auf self.assertContains(response, name_validation_error)
. Hier ist die Spur zurück:
Failure
Traceback (most recent call last):
File "/Users/USER/workspace/PycharmProjects/hashtagbrews/homebrewdatabase/tests/test_views.py", line 189, in test_validation_errors_return_hops_list_page
self.assertContains(response, name_validation_error)
File "/Users/USER/workspace/Envs/hashtagbrews/lib/python3.4/site-packages/django/test/testcases.py", line 398, in assertContains
msg_prefix + "Couldn't find %s in response" % text_repr)
AssertionError: False is not true : Couldn't find 'A hop name is required' in response
Meine Ansicht in views.py macht die hops.html
Vorlage mit Fehlern, wenn das Formular ungültig ist:
def addhops(request):
add_form = HopForm(request.POST or None)
if request.method == 'POST':
if add_form.is_valid():
Hop.objects.create(name=request.POST['name'],
min_alpha_acid=request.POST['min_alpha_acid'],
max_alpha_acid=request.POST['max_alpha_acid'],
country=request.POST['country'],
comments=request.POST['comments']
)
return redirect('hops_list')
else:
hops_list = Hop.objects.all()
return render(request, 'homebrewdatabase/hops.html', {'hops': hops_list, 'form': add_form})
return render(request, 'homebrewdatabase/addhops.html', {'form': add_form})
Wenn ich manuell über die Website klicken, erhalte ich genau das, was ich suche nach: einer Umleitung von der modalen zu der Haupt-Hops-Seitenliste mit einer Bootstrap-Alarmbox am oberen Ende, die eine ungeordnete Liste von Fehlern von add_hops.errors enthält. Ich habe die Antwort nach der Postanforderung ausgedruckt (self.client.post('url', data={invalid data})
) und es enthält nur das modale Formular. Was wäre die richtige Methode, um diesen Test zu beenden? Oder muss ich meine Formularvalidierung neu schreiben?
löschen Sie Ihr Terminal, fügen Sie 'print response' nach' response = ... 'hinzu und führen Sie dann nur diesen Test aus. Dann überprüfen Sie, was Sie behaupten, ist tatsächlich in der gedruckten Ausgabe - weil Sie bei der ersten Behauptung scheitern, könnte etwas passieren, z. Seite nicht Rendering usw. –
auch gute Idee, URLs anstelle von '/ beerdb/add/Hopfen ' –
Das Problem ist, wie ich vermutete, response.context [' Anfrage ']. Es lautet wie folgt 'Anfrage':