django - 使用 Tastypie 进行多部分请求单元测试

标签 django unit-testing tastypie multipart

我一直在尝试对多部分请求进行单元测试,但没有成功。我一直在做的是:

        json_data = json.dumps({
        "group_type" : "1",
        "foo" : {
            "visibility" : "4",
            "description" : "#natureza tranquilidade",
            "bars" : [
                {
                    "x_pos" : 28.16901408450704,
                    "y_pos" : 38.87323943661972,
                    "bar_name" : "morro"
                },
                {
                    "x_pos" : 65.07042253521126,
                    "y_pos" : 65.07042253521126,
                    "bar_name" : "cachoeira"
                }
            ]
        }
    })
    photo = Image.new('RGB', (100, 100))
    tmp_file = tempfile.NamedTemporaryFile(suffix='.jpg')
    photo.save(tmp_file)

    post_data = {
        "json_data": json_data,
        "photo": photo
    }

    response = self.client.post(
        '/api/endpoint/',
        data=post_data,
        format='multipart',
        authentication=self.get_credentials(self.user2)
    )

但我收到以下错误:

File /venv/lib/python2.7/site-packages/tastypie/serializers.py", line 200, in serialize raise UnsupportedFormat("The format indicated '%s' had no available serialization method. Please check your ``formats`` and ``content_types`` on your Serializer." % format)
UnsupportedFormat: The format indicated 'json' had no available serialization method. Please check your ``formats`` and ``content_types`` on your Serializer.

你有什么想法吗?

最佳答案

通过上传真实文件并使用 Django 的测试 API 而不是 Tastypie 的测试 API 来修复:

    def test_post(self):
    json_data = json.dumps({
        "group_type" : "1",
        "look" : {
            "visibility" : "4",
            "description" : "#natureza tranquilidade",
            "photo_tags" : [
                {
                    "x_pos" : 28.16901408450704,
                    "y_pos" : 38.87323943661972,
                    "brand_name" : "morro"
                },
                {
                    "x_pos" : 65.07042253521126,
                    "y_pos" : 65.07042253521126,
                    "brand_name" : "cachoeira"
                }
            ]
        }
    })

    with open('cards/tests/look_test.jpg') as photo:
        response = self.client.client.post(
            '/api/endpoint/',
            data={'json_data': json_data, 'photo': photo},
            HTTP_AUTHORIZATION=self.get_credentials(self.user2)
        )
        print response
        self.assertEquals(response.status_code, 201)

玩得开心!

关于django - 使用 Tastypie 进行多部分请求单元测试,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29279824/

相关文章:

python - 使用 ._meta Django

python - Django:密码重置 ReverseMatch 错误

swift - 如何在 Swift 单元测试中断言可选 Bool 的值?

unit-testing - 测试列表在 Visual Studio 2013 中去了哪里?

visual-studio - 当 VS2013 以管理员身份运行时,MSTest 正在删除测试结果

django - 'RelatedManager' 对象没有属性 'pk'

python - 来自动态字段的外键资源

HTML 表格截断文本但尽可能适合

使用 django-nose 的 Django 负载测试装置

django - Tastypie "always_return_data"选项更改响应状态代码