测试Django

时间:2016-10-17 14:39:04

标签: django unit-testing python-3.x

我正在使用Django REST Framework开发API。 我有一个models.ImageField的Django模型,它运行得很好。 但是当我想单元测试创​​建模型对象时,我得到错误:

UnicodeDecodeError: 'utf-8' codec can't decode byte 0x89 in position 0: invalid start byte

我的代码:

class PlacesTest(APITestCase):

    . . .

    def test_create_place_full(self):
        . . .
        image = SimpleUploadedFile(name='test.jpg',
                                   content=open('test.png', 'rb').read(),
                                   content_type='image/jpeg')

        request = self.factory.post(reverse('place-list'),
                                    {'name': 'test_place_1',
                                     'picture': image,  
                                     })

我尝试将string传递给图片路径,我尝试过Django testing model with ImageField的方法进行测试,但没有成功。

添加image:文件对象或带路径的字符串时,我应该将哪种类型传递给Django REST框架?

如何将真实文件添加到我的测试中?

1 个答案:

答案 0 :(得分:2)

如果有人有兴趣,找到我的问题的解决方案:

我需要的只是在请求参数中指定format='multipart'

request = self.factory.post(reverse('place-list'),
                                {'name': 'test_place_1',
                                 'picture': self.image},
                                format='multipart')
我的项目中的

是:

REST_FRAMEWORK = {
    ...
    'TEST_REQUEST_DEFAULT_FORMAT': 'json'
}

因此无法将图像添加到POST请求中。