簡體   English   中英

如何在單元測試 django 中從請求正文傳遞數據

[英]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.

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