簡體   English   中英

單元測試 function 消耗來自 django rest Z8A5DA52ED126447D359E70C0572 的請求查看

[英]Unit testing a function which consumes request from django rest api view

我不確定測試視圖/權限類中使用的函數的正確方法是什么。

這是我的請求的有效負載:

{"name": "John"}

這是我要測試的 function:

def get_name(request):
    return request.data['name']

這是將使用 function 的視圖:

class SomeView(APIView):
    def get(self, request):
        name = get_name(request=request)
        return Response(status=200)

我應該如何創建一個夾具來測試get_name function? 我試過這個:

@pytest.fixture
def request_fixture()
    factory = APIRequestFactory()
    return factory.get(
        path='',
        data={"name": "John"},
        format='json')

def test_get_name(request_fixture):
    assert get_name(request=request_fixture) == "John"

但我收到一個錯誤: AttributeError: 'WSGIRequest' object has no attribute data

一種解決方法似乎是解碼body屬性:

def get_name(request):
    data = json.loads(request.body.decode('utf-8'))
    return data['name']

但這感覺不是正確的方法,我想我錯過了關於WSGIRequest class 的一些內容。 有人可以向我解釋它應該如何測試嗎? 如果我也可以使用相同的夾具來測試視圖,那就太好了。

我認為您不需要測試夾具。 您沒有測試整個視圖,只是一個助手 function。 您可以通過向 lambda 添加屬性來非常輕松地發出類似請求的 object:

def test_get_name():
    request = lambda: None
    request.data = {"name": "John"}
    assert get_name(request=request) == "John"

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM