すべての書籍を返すか、クエリパラメータで指定されたジャンルの書籍のみを返す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ビューセットは次のようになります
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.register(r'api/titles-and-blurbs', TitlesAndBlurbsListViewSet)
ブラウザで「api/titles-and-blurbs /?genre = horror」というURLにアクセスすると、ジャンルホラーなプリントステートメントとタイトル、ブラーブが表示されます。ただし、テストスイートでヒットすると、printステートメントのジャンルが表示されず、「i dont have query params」のprintステートメントが表示され、すべての書籍が返されます。どんな助けでも本当に感謝しています。