django重定向测试-AssertionError:302!= 200:无法检索内容:响应代码为302预期为200

问题描述

我无法通过测试来接受重定向工作...我不断收到此错误“ AssertionError:302!= 200:无法检索内容:响应代码为302(预期为200)”

重定向有效

日志

web_1  | [11/Oct/2020 12:41:33] "GET /calendar/5d8b6a0a-66b8-4909-bf8f-8616593d2663/update/ HTTP/1.1" 302 0
web_1  | [11/Oct/2020 12:41:33] "GET /calendar/list/ HTTP/1.1" 200 4076

请告诉我我要去哪里错了。我曾尝试使用assertRedirects,但这仍然没有通过

test.py

class EventTests(TestCase):

    def setUp(self):

        self.eventbooked = Event.objects.create(
            manage=self.user,availability='Booked',start_time='2020-09-30 08:00:00+00:00',end_time='2020-09-30 17:00:00+00:00',)


    def test_event_update_redirect_if_booked_view(self):
        self.client.login(email='test_username@example.com',password='da_password')
        response = self.client.get(self.eventbooked.get_absolute_url_edit())
        self.assertEqual(response.status_code,302)
        self.assertContains(response,'Update Availability')

view.py-这是重定向发生的地方,不包含该对象。

class CalendarEventUpdate(LoginrequiredMixin,UpdateView):
    model= Event
    form_class = EventForm
    template_name='calendar_update_event_form.html'
    def get_queryset(self):
        return Event.objects.filter(manage=self.request.user).exclude(availability='Booked')

    def get(self,request,*args,**kwargs):
        try:
            return super(CalendarEventUpdate,self).get(request,**kwargs)
        except Http404:
            return redirect(reverse('calendar_list'))

models.py

    def get_absolute_url_edit(self):
        return reverse('calendar_event_detail_update',args=[str(self.id)])

解决方法

断言错误不是您的期望失败。

  • self.assertEqual(response.status_code,302)这样就可以了。
  • self.assertContains(response,'Update Availability')但是,此操作失败。您的回应是302回应,没有内容。在实际示例中,您给出了:
    • "GET /calendar/5d8b6a0a-66b8-4909-bf8f-8616593d2663/update/ HTTP/1.1" 302->您正在为此请求测试响应中的内容,而...
    • "GET /calendar/list/ HTTP/1.1" 200-> ...内容在对此请求的响应中。