2011-11-23 40 views
18

Ngay bây giờ tôi chỉ kiểm tra phản ứng của liên kết như vậy:Django Unit Test để thử nghiệm một download tập tin

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

Có cách nào Django-ic để thử nghiệm một liên kết để xem nếu một tập tin tải về sự kiện thực sự diễn ra? Có vẻ như không thể tìm thấy nhiều tài nguyên về chủ đề này.

Trả lời

22

Nếu url có nghĩa là tạo một tệp thay vì phản hồi http "bình thường", thì content-type và/hoặc content-disposition của nó sẽ khác nhau.

đối tượng phản ứng về cơ bản là một cuốn từ điển, vì vậy bạn có thể để một cái gì đó giống như

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

biết thêm: https://docs.djangoproject.com/en/dev/ref/request-response/#telling-the-browser-to-treat-the-response-as-a-file-attachment

UPD: Nếu bạn muốn đọc các nội dung thực tế của các tập tin đính kèm, bạn có thể sử dụng response.content. Ví dụ về tệp 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

có nhưng bạn không kiểm soát tệp đã tải xuống ... – francois

+0

bạn có muốn kiểm tra nội dung thực của tệp không? bạn có thể sử dụng 'response.content' - https://docs.djangoproject.com/en/dev/ref/request-response/#id4 – hwjp

+1

Tôi đang cố gắng để làm điều này chính xác nhưng nhận được lỗi "ValueError: Tôi/O hoạt động trong hồ sơ khép kín" bất cứ khi nào tôi làm bất cứ điều gì với response.content, thậm chí đi qua nó để StringIO. –

Các vấn đề liên quan