现在我只是判断链接的响应,如下所示:

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

有没有一种Django-ic的方法来测试链接以查看文件下载事件是否实际发生?在这个话题上似乎找不到太多的资源.

推荐答案

如果url的目的是生成一个文件,而不是"正常"的http响应,那么它的content-type和/或content-disposition将不同.

响应对象基本上是一个字典,所以您可以这样做

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

更多信息: https://docs.djangoproject.com/en/dev/ref/request-response/#telling-the-browser-to-treat-the-response-as-a-file-attachment

更新: 如果您想要读取附加文件的实际内容,可以使用response.content.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()

Django相关问答推荐

Django相关对象引用模板

__init__()获取了意外的关键字参数';id';

我如何告诉Django如何恢复自定义迁移?

Django:添加第二个';详细';用于检索额外信息的视图

源自访问外键关系的模型方法 get_absolute_url 的 django 重复 SQL 查询

Django 按月分组并按月显示在模板中

如何使用具有某些权限的 Django 组的转储数据和加载数据?

Django rest框架:自定义对象权限不起作用

如何将 select_related 应用于 Django 中的 m2m 关系的对象?

使用django提交后如何保留html表单数据?

django 管理员登录突然要求 csrf 令牌

Apache + mod_wsgi 与 nginx + gunicorn

如何在 Django 中触发 500 错误?

如何在 Django 中执行批量插入?

Django:以 10 为底的 int() 的无效文字

登录后django重定向不起作用next不发布?

Django unique_together 与可为空的 ForeignKey

UpdateView 中的success_url,基于传递的值

Django中reverse()和reverse_lazy()的区别

在 Django 中查询 top x 元素