0

我正在尝试模拟一个简单的 POST 请求,该请求从请求正文创建资源,并返回创建的资源。为简单起见,我们假设创建的资源与传入的完全相同,但在创建时给出了 ID。这是我的代码:

def test_create_resource(requests_mock):
    # Helper function to generate dynamic response
    def get_response(request, context):
        context.status_code = 201
        # I assumed this would contain the request body
        response = request.json()
        response['id'] = 100
        return response

    # Mock the response
    requests_mock.post('test-url/resource', json=get_response)
    resource = function_that_creates_resource()
    assert resource['id'] == 100

我最终遇到运行时错误JSONDecodeError('Expecting value: line 1 column 1 (char 0)')。我认为这是因为request.json()不包含我要查找的内容。如何访问请求正文?

4

2 回答 2

0

由于缺少一些信息,我不得不稍微修改一下您的示例-但基本想法对我来说很好。我认为如上所述,您创建发布请求的方式有问题。

import requests
import requests_mock


with requests_mock.mock() as mock:

    # Helper function to generate dynamic response
    def get_response(request, context):
        context.status_code = 201
        # I assumed this would contain the request body
        response = request.json()
        response['id'] = 100
        return response

    # Mock the response
    mock.post('http://example.com/test-url/resource', json=get_response)

    # resource = function_that_creates_resource()
    resp = requests.post('http://example.com/test-url/resource', json={'a': 1})

    assert resp.json()['id'] == 100
于 2021-05-28T02:59:25.750 回答
0

这个例子并不完整,因此我们无法真正看到正在发生的事情。特别是,查看样本会很有用function_that_creates_resource

也就是说,我认为您的get_response代码是有效的。我相信你没有在你的 post 请求中发送有效的 JSON 数据function_that_creates_resource

于 2021-03-04T10:49:16.103 回答