Ist APITest mit Query params anders ist, dann einfach die normale url?

Schreibe ich einige unit-tests gegen eine API, die entweder liefert alle Bücher, oder gibt nur die Bücher der Genres in der query params. Dies scheint zu funktionieren, wenn ich ihn treffe in meinem lokalen dev-server. Jedoch, es gar nicht gehen in der else-Anweisung, wenn das genre ist angegeben in meinem unit-test.

Mein unit-test sieht wie folgt aus:

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

Mein api-viewset sieht wie folgt aus

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

meine url/router sieht aus wie

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

Wenn ich auf die url 'api/Titel-und-kleinere Texte/?genre=horror' in meinem browser erhalte ich die print-Anweisung und Titel und blurbs, dass das genre horror. Allerdings, wenn ich Treffer in den
test-suite habe ich nicht die print-Anweisung genre bekomme ich die print-Anweisung von 'i dont haben-query params', und es gibt alle Bücher. Jede Hilfe ist wirklich
geschätzt.

  • Nur um zu testen, wo es schief geht, würde Sie Ihre Ansicht ändern code ein wenig? Ändern Sie es so if not genre gibt etwas anderes als das, was Sie erhalten, wenn self.action == 'list' ist nicht Wahr. Im Grunde, würde ich mag, um zu sehen, an welcher Stelle es zu brechen: ob die Aktion ist nicht auf der Liste ist oder ob es nicht immer ein genre. Sie können es ändern, zurück, nachdem Sie feststellen, dass.
  • Es wird in das selbst.action == 'Liste' - ich weiß, es ist da eine weitere if-Anweisung die Aktion, die ich nicht anzeigen, weil Sie nicht relevant sind.
InformationsquelleAutor user133688 | 2014-05-04
Schreibe einen Kommentar