Python django测试视图仅适用于主键
我正在做一个django项目。我已经建立了前端和后端。现在我想写单元测试 我想测试一个基于类的视图,用于从url'''path('posts/',Postview.as_view(),name=“posts'),''创建、删除和检索博客文章 我的Postview视图如下:Python django测试视图仅适用于主键,python,django,unit-testing,django-rest-framework,django-views,Python,Django,Unit Testing,Django Rest Framework,Django Views,我正在做一个django项目。我已经建立了前端和后端。现在我想写单元测试 我想测试一个基于类的视图,用于从url'''path('posts/',Postview.as_view(),name=“posts'),''创建、删除和检索博客文章 我的Postview视图如下: class Postview(views.APIView, LimitOffsetPagination): authentication_classes = [TokenAuthentication, ] pe
class Postview(views.APIView, LimitOffsetPagination):
authentication_classes = [TokenAuthentication, ]
permission_classes = [IsAuthenticated, ]
def get(self, request, pk=None):
if pk:
try:
query = Post.objects.filter(pk=pk)
# print(query)
print("in post get")
serializer = PostSerializer(
query, many=True, context={'request': request})
data = commonPost(serializer.data, request)
return Response(data)
except:
return Response({"message": "No Data found"})
else:
query = Post.objects.all().order_by('-id')
serializer = PostSerializer(
query, many=True, context={'request': request})
data = commonPost(serializer.data, request)
return Response(data)
def post(self, request, pk=None):
if pk:
snapshot = Post.objects.get(pk=pk)
serializers = PostSerializer(
snapshot, data=request.data, context={'request': request})
if serializers.is_valid():
serializers.save()
return Response({'error': False})
return Response({'error': True})
else:
serializer = PostSerializer(
data=request.data, context={'request': request})
if serializer.is_valid():
serializer.save()
return Response({'error': False})
return Response({'error': True})
def delete(self, request, pk):
try:
snippet = Post.objects.get(pk=pk)
if snippet.profile.id == request.user.profile.id:
snippet.delete()
return Response({"error": False})
else:
return Response({"error": True})
except:
return Response({"message": "No data found for this ID"})
现在我的单元测试
def test_post_view(self):
client=self.get_client()
response=client.get("/api/posts/")# this line
self.assertEqual(response.status_code,200)
这个测试给出了401的错误=200
但是如果我改变网址
到
测试结果为200 k。
另外,如果我通过client.post(“/api/posts/”,self.post)创建一个新的post#这里是通过自定义post类的post模型创建的post对象。
响应返回401=200
我想知道它为什么会这样,我想知道如何为这段代码创建单元测试。
多谢各位
POST
方法的文章,但是GET
方法
POST
不接受任何pk
,因为它创建了一个新资源。
所以这是无效的IsAuthenticated
权限。首先在setUpClass
或setUp
中创建用户,然后在setUp
中使用此用户登录响应({“消息”:“未找到数据”})
,但它应该返回状态代码404ModelViewSet
开始。它将强制执行最佳实践,并且您可能会编写更少的代码
response=client.get("/api/posts/1")
def test_post_view(self):
client=self.get_client()
response=client.get("/api/posts/")# this line
self.assertEqual(response.status_code,200)
client.post("/api/posts/",self.post)
def setUp(self) -> None:
self.client.force_login(self.user)