unit tutorial test framework drf create django unit-testing django-rest-framework django-testing

django - tutorial - ¿APITest con los parámetros de consulta es diferente a la URL normal?



tdd django rest framework (1)

Intente pasar el parámetro de consulta como una carga útil de datos en su lugar. Cambie la línea en su prueba a:

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

Django documenta here sobre las diferentes formas de pasar parámetros de consulta en urls.

Otra persona informó un problema similar con un QUERY_PARAMS vacío mientras probaba DRF (consulte here ). Parece que lo arreglaron pero tal vez se perdieron algo o no obtuviste la actualización.

Estoy escribiendo algunas pruebas de unidad contra una API que devuelve todos los libros o solo devuelve los libros del género dado en los parámetros de consulta. Esto parece estar funcionando cuando lo golpeo en mi servidor de desarrollo local. Sin embargo, ni siquiera entra en la sentencia else si el género está especificado en mi prueba de unidad.

Mi prueba de unidad se ve así:

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())

Mi conjunto de vistas api se ve así

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()

mi url / enrutador parece

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

Cuando golpeo la url ''api / titles-and-blurbs /? Genre = horror'' en mi navegador, obtengo la declaración impresa y los títulos y blurbs que tienen el género horror. Sin embargo, cuando llego al conjunto de pruebas, no obtengo el género de la declaración impresa, obtengo la declaración impresa de "No tengo parámetros de consulta" y devuelve todos los libros. Cualquier ayuda es muy apreciada.