![](/img/trans.png)
[英]Calling View in API Request Factory when testing in Django Rest Framework
[英]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.