Sto scrivendo alcuni test unitari contro un'API che restituisce tutti i libri o restituisce solo i libri del genere specificato nei parametri della query. Questo sembra funzionare quando l'ho colpito nel mio server di sviluppo locale. Tuttavia, non entra nemmeno nella dichiarazione else se il genere è specificato nel mio test unitario.APITest con parametri Query diversi dall'URL normale?
Il mio test di unità si presenta così:
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())
mio api viewset assomiglia a questo
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()
mio url/router si presenta come
router.register(r'api/titles-and-blurbs', TitlesAndBlurbsListViewSet)
Quando mi ha colpito l'url ' api/titles-and-blurbs /? genre = horror 'nel mio browser ottengo la dichiarazione di stampa e titoli e blurb che hanno il genere horror. Tuttavia, quando premo nella suite di test , non ottengo il genere di istruzioni di stampa. Ottengo l'istruzione print di "non ho parametri di query" e restituisce tutti i libri. Qualsiasi aiuto è davvero apprezzato .
Solo per verificare dove sta andando male, cambieresti un po 'il codice di visualizzazione? Modificalo in modo che "if not genere" restituisca qualcosa di diverso da ciò che ottieni se "self.action == 'list'' non è True. Fondamentalmente, mi piacerebbe vedere a * quale * punto si sta rompendo: se l'azione non è lista o se non sta ottenendo un genere. Puoi cambiarlo dopo averlo trovato. – Alex
Entra in self.action == 'list' - Lo so perché c'è un'altra dichiarazione if l'azione che non sto visualizzando perché non è rilevante. – user2734679