首页 > 解决方案 > Django TestCase:GET 请求应该返回 404 但在我的测试中返回 200...?

问题描述

例如,我有一个打印 pdf 简历的 pdf 函数,该函数使用 url /randomization/pdf/?patient=CIV-TR-001&medicament=8&type=1 调用

如果 GET 参数丢失或无效,则返回 404 或 500 错误,这是正确的行为

我想对此进行测试,但即使我在测试中通过了空的“患者”,它也总是返回 status_code=200 (/randomization/pdf/?patient=&medicament=8&type=1) 而当我在我的应用程序,我正确地重定向到我的 404 页面...

我不明白为什么

网址.py

app_name='randomization'
urlpatterns = [
    path('pdf/', views.pdf, name='pdf'),
]

视图.py

@login_required
def pdf(request): 
...

    # Données du formulaire de confirmation de randomisation
    patient =  get_object_or_404(Randomisation, ran_num = request.GET.get('patient'))
...  


    if request.GET.get('medicament') == '':
        med = None
    else:
        med = request.GET.get('medicament')
    dru =  get_object_or_404(Medicament, med_ide = med)

...

    return FileResponse(buffer, as_attachment=True, filename=form + ' ' + pat +'.pdf')

测试.py

class IndexPageTestCase(TestCase):
    def setUp(self):
        self.client = Client(HTTP_ACCEPT_LANGUAGE='en')
        self.pays = Pays.objects.create(pay_ide = 1,pay_nom_eng = 'Ivory Coast',pay_nom_fra = 'Côte d Ivoire',pay_abr = 'CIV')
        self.region = Region.objects.create(reg_ide = 1,pay = self.pays,reg_nom = 'Region 1',reg_abr = 'RE1')
        self.site = Site.objects.create(sit_ide = 1,reg=self.region,sit_typ = 'National',sit_nom_eng = 'PACCI',sit_nom_fra = 'PACCI',sit_abr = 'PA')
        self.user = User.objects.create_user('Slater','slater@surfeur.com','mereva2019')
        self.profile = Profile.objects.create(user=self.user,site = self.site)
        self.patient = Randomisation.objects.create(ran_num='CIV-TR-001',ran_dat='2020-03-09',ran_inv='Fanning',ran_pro=1,ran_crf_inc=1,ran_tbc=3,ran_crf_eli=1,ran_cri=1,ran_sta=1,ran_vih=0,ran_bra=4,ran_med='AAA',ran_log_dat=timezone.now(),ran_log_sit='TR')
        self.medicament = Medicament.objects.create(med_dru=1,med_num='AAA',med_sit='TR',med_pay='CIV',med_dat='2020-03-09',med_eta=1,pat='CIV-TR-001')

    def test_index_page(self):
        response = self.client.post('/registration/login/', {'username': 'Slater', 'password': 'mereva2019'},follow=True)
        self.assertEquals(response.status_code,200)

    def test_pdf_page(self):
        # cas référence : informations passées en get (patient, medicament et type) sont valides
        url = '/randomization/pdf/'
        response = self.client.get(url,{'patient': self.patient.ran_num, 'medicament': str(self.medicament.med_ide),'type' : 1},follow=True)
        self.assertEquals(response.status_code,200)

        # patient = ''
        url = '/randomization/pdf/'
        response = self.client.get(url,{'patient': '', 'medicament': str(self.medicament.med_ide),'type' : 1},follow=True)
        self.assertEquals(response.status_code,404)

标签: pythondjangotestcase

解决方案


推荐阅读