2011-11-23 9 views
18

Ahora sólo estoy comprobando la respuesta del enlace de este modo:Prueba de la unidad de Django para probar un archivo de descarga

self.client = Client() 
response = self.client.get(url) 
self.assertEqual(response.status_code, 200) 

¿Hay una manera de Django-ic para probar un enlace para ver si una descarga de archivos evento realmente tiene lugar? Parece que no puede encontrar muchos recursos sobre este tema.

Respuesta

22

Si la url está destinada a producir un archivo en lugar de una respuesta http "normal", entonces su content-type y/o content-disposition serán diferentes.

el objeto respuesta es básicamente un diccionario, por lo que podría así que algo como

self.assertEquals(
    response.get('Content-Disposition'), 
    "attachment; filename=mypic.jpg" 
) 

más información: https://docs.djangoproject.com/en/dev/ref/request-response/#telling-the-browser-to-treat-the-response-as-a-file-attachment

UPD: Si quiere leer el contenido real del archivo adjunto, puedes usar response.content. Ejemplo de un archivo zip:

try: 
    f = io.BytesIO(response.content) 
    zipped_file = zipfile.ZipFile(f, 'r') 

    self.assertIsNone(zipped_file.testzip())   
    self.assertIn('my_file.txt', zipped_file.namelist()) 
finally: 
    zipped_file.close() 
    f.close() 
+1

sí, pero usted no controla el archivo descargado ... – francois

+0

¿quiere decir que desea comprobar el contenido real del archivo? puede usar 'response.content' - https://docs.djangoproject.com/en/dev/ref/request-response/#id4 – hwjp

+1

Estoy tratando de hacer esto exactamente pero obtengo el error" ValueError: I/O operación en archivo cerrado "cada vez que hago algo con response.content, incluso pasándolo a StringIO. –

Cuestiones relacionadas