2017-01-24 5 views
0

Ich erhalte eine Fehlermeldung, wenn python manage.py test ausgeführt wird:Django Testing - Typeerror: Argument Modell vom Typ ist nicht iterable

TypeError: argument of type 'Course' is not iterable 

Hier sind meine Tests:

def test_course_list_view(self): 
     resp = self.client.get(reverse('courses:list')) 
     self.assertEqual(resp.status_code, 200) 
     self.assertIn(self.course, resp.context['courses']) 
     self.assertIn(self.course2, resp.context['courses']) 

    def test_course_detail_view(self): 
     resp = self.client.get(reverse('courses:detail', args=[self.course.pk])) 
     self.assertEqual(resp.status_code, 200) 
     self.assertIn(self.course, resp.context['course']) 

Hier ist meine Ansicht, dass ich ‚m Prüfung:

def course_list(request): 
    courses = Course.objects.all() 
    return render(request, 'courses/course_list.html', {'courses': courses}) 

def course_detail(request, pk): 
    course = get_object_or_404(Course, pk=pk) 
    return render(request, 'courses/course_detail.html', {'course': course}) 

verwirrt, weil ich nicht einen Fehler in test_course_list_view bekommen aber test_course_detail_view wirft einen Fehler?

+0

Können Sie den gesamten StackTrace bereitstellen? –

+0

Es wurde gelöst – bwilburn

Antwort

1

assertIn macht, was der Name impliziert: es behauptet, dass Argument eins in Argument zwei ist. Aber in Ihrem Test für die Detailansicht übergeben Sie resp.context['course'] als Ihr Argument zwei, das ist keine Liste oder Container, es ist eine einzelne Instanz.

Sie müssen vergleichen, dass die beiden gleich sind, nicht, dass man in der anderen ist.

self.assertEqual(self.course, resp.context['course']) 
+0

Ah, Danke Daniel! Ich habe meinen Fehler gefunden, bevor ich deine Antwort gelesen habe, aber das ist genau richtig. – bwilburn

Verwandte Themen