gpt4 book ai didi

django - 带有查询参数的 APITest 是否与普通 url 不同?

转载 作者:行者123 更新时间:2023-11-28 19:37:12 24 4
gpt4 key购买 nike

我正在针对返回所有书籍或仅返回查询参数中给定类型的书籍的 API 编写一些单元测试。当我在我的本地开发服务器中点击它时,这似乎有效。但是,如果在我的单元测试中指定了流派,它甚至不会进入 else 语句。

我的单元测试是这样的:

class TitlesAndBlurbsListTestCase(APITestCase):
def setUp(self):
# Creates a lot of books with genre horror
# and books not in the horror genre

def test_horror_genre(self):
# Ensure that screener can see all the available books
self.client.login(username='b', password='b')
response = self.client.get('/api/titles-and-blurbs/?genre=horror')
self.assertEqual(response.status_code, status.HTTP_200_OK)

# Ensure that the screener gets all horror books at first
horror_books = TitlesAndBlurbs.objects.filter(genre='horror')
# I keep getting an assertion error here - it returns all the books
self.assertEqual(len(response.data), horror_books.count())

我的 api View 集看起来像这样

class TitlesAndBlurbsListViewSet(viewsets.mixins.ListModelMixin,
viewsets.mixins.RetrieveModelMixin,
viewsets.GenericViewSet):
model = TitlesAndBlurbs
permission_classes = [ScreenerPermissions]
serializer_class = TitlesAndBlurbsSerializer

def get_queryset(self):
if self.action == 'list':
genre = self.request.QUERY_PARAMS.get('genre', None)
if not genre:
print 'i dont have query params of genre'
TitlesAndBlurbs.objects.all()
else:
print genre
TitlesAndBlurbs.objects.filter(genre=genre)
return TitlesAndBlurbs.objects.all()

我的 url/router 看起来像

router.register(r'api/titles-and-blurbs', TitlesAndBlurbsListViewSet)

当我在浏览器中点击 url 'api/titles-and-blurbs/?genre=horror' 时,我得到了带有恐怖类型的打印声明和标题和简介。然而,当我击中测试套件,我没有得到打印语句类型我得到“我没有查询参数”的打印语句,它返回所有书籍。任何帮助都是真的赞赏。

最佳答案

尝试将查询参数作为数据负载传递。将测试中的行更改为:

response = self.client.get('/api/titles-and-blurbs/', {'genre': 'horror'})

Django 文档 here关于在 url 中传递查询参数的不同方式。

另一个人在测试 DRF 时报告了类似的空 QUERY_PARAMS 问题(参见 here )。看起来他们修复了它,但也许他们遗漏了什么或者您没有收到更新。

关于django - 带有查询参数的 APITest 是否与普通 url 不同?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23451295/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com