Я пишу некоторые модульные тесты против API, которые либо возвращают все книги, либо возвращают только книги данного жанра в параметрах запроса. Кажется, это работает, когда я ударил его на своем локальном сервере dev. Тем не менее, он даже не входит в инструкцию else, если жанр указан в моем unit test.
Мой unit test выглядит следующим образом:
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 viewet выглядит следующим образом
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" в моем браузере, я получаю выражение о печати и заголовки и рекламные ролики, у которых есть ужас жанра. Однако, когда я попал в тестовый набор, я не получаю жанр описания печати. Я получаю инструкцию печати "Я не имею параметров запроса", и он возвращает все книги. Любая помощь действительно оценили.