PIL - 提交的文件为空测试用例

时间:2015-06-12 08:54:21

标签: python django django-rest-framework python-imaging-library

我有一个完美的文件上传,但我想为它编写一个测试,所以我做了以下....

   def test_post_ok(self):

    image = Image.new('RGB', (100, 100)
    tmp_file = tempfile.NamedTemporaryFile(suffix='.jpg')
    image.save(tmp_file)
    payload = {
        "name": "Test",
        "thumbnail_image": tmp_file
    }
   api = APIClient()
   api.credentials(Authorization='Bearer ' + self.token)
   response = api.post(url, payload, format='multipart')

然而,测试给出错误......

<PIL.JpegImagePlugin.JpegImageFile image mode=RGB size=1024x768 at 0x108A5DCF8>
{'thumbnail_image': [u'The submitted file is empty.']}

我认为我没有正确地做到这一点,如果不是为什么?

1 个答案:

答案 0 :(得分:7)

我之前的猜测是错误的。您正在使用具有多部分功能的Rest Framework(非常棒!),因此您可以按原样发送文件,并且文件将以多部分编码。

此处的错误如下:

  1. 您打开文件tmp_file
  2. 您将图像内容写入此文件
  3. filepointer现在位于文档的末尾
  4. 您将文档传递给APIClient(),这是一个简单的测试包装器,它将参数传递给rest_framework,最终您的调用将被编码
  5. 编码将调用tmp_file.read()。由于指针仍在文件的末尾,read()将返回0个字节,为您留下一个空文档。
  6. 解决方案: 在调用tmp_file.seek(0)

    之前post()或重新打开文件