[英]How to pass data from request body in unit test django
我修改了 get_queryset() 方法,如下所示:
def get_queryset(self):
type_of_review = self.request.data['type_of_review']
queryset = Reviews.objects.filter(type_of_review=type_of_review).order_by('-id')[:3]
return queryset
它根據 type_of_review 字段對我的模型進行排序,對它們進行排序並最后檢索 3 個。 當我嘗試為其編寫單元測試時,我遇到了一個問題,即我找不到可靠或有效的方法將過濾器參數傳遞給我的 get_queryset() 方法。
我試着這樣做:
def test_list_three_review(self):
self.data = [ReviewsFactory.create() for i in range(10)]
response = self.client.get(self.url2, {"type_of_review": "Team"})
self.assertEqual(response.status_code, status.HTTP_200_OK)
但是出現錯誤: test_list_three_review - KeyError: 'type_of_review'有人可以向我解釋我做錯了什么嗎? 很樂意提供任何其他信息。 不管怎么說,還是要謝謝你!
好的,所以 self.client.get 獲取應該是字典的數據。 我想你想做以下...
def test_list_three_review(self):
data = {'type_of_review':'Team'}
response = self.client.get(self.url2, data)
self.assertEqual(response.status_code, status.HTTP_200_OK)
不確定為什么要在請求中包含對象列表,因為您的 get_queryset 方法無論如何都會覆蓋它。
您將數據作為查詢字符串參數傳遞。 為了在視圖中解析它,您可以使用request.GET.get("type_of_review")
您的 get_queryset() 方法將變為
def get_queryset(self):
type_of_review = self.request.GET.get('type_of_review')
queryset = Reviews.objects.filter(type_of_review=type_of_review).order_by('-id')[:3]
return queryset
GET 請求不適用於傳遞 json 數據,如果您需要將數據作為 json 傳遞,您可以使用 POST 方法
然后你可以傳遞數據
def test_list_three_review(self):
self.data = [ReviewsFactory.create() for i in range(10)]
data = {"type_of_review": "Team"}
response = self.client.post(self.url2, data)
self.assertEqual(response.status_code, status.HTTP_200_OK)
並且您的 get_queryset 方法將按原樣工作。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.