Django类视图测试遇TypeError:参数数量不符怎么解决?
解决Django类视图测试的TypeError问题
嘿,我来帮你搞定这个测试报错的问题!你遇到的TypeError是因为调用Django类视图的方式不对,咱们一步步来修正:
先看问题根源
首先你的类视图和测试代码里有两个小问题:
1. 类视图的post方法参数缺失
你的原视图里post方法没写self和request参数,这会导致后续调用也出错,先补上:
class Myview(LoginRequiredMixin, View): def post(self, request): # 必须包含self和request参数 # 你的业务逻辑代码 return HttpResponse(status=200) # 记得返回HttpResponse对象
2. 测试代码里实例化视图的方式错误
Django的类视图不能直接用MyView(request)这种方式初始化,因为View类的构造函数不接受位置参数的request,得用它的as_view()方法来生成可处理请求的视图函数。
你的原测试代码错误部分:
response = MyView(request) # 这行是错误的根源!
修正后的测试代码
把测试代码里的视图调用改成as_view()的标准方式:
class MyViewTest(TestCase): def setUp(self): self.factory = RequestFactory() self.user = User.objects.create_user( username='jacob', email='soos@i.com', password='vvggtt') def view_test(self): # 创建POST请求实例 request = self.factory.post('/my-url/') request.user = self.user # 正确调用方式:先用as_view()获取视图函数,再传入request response = MyView.as_view()(request) print(response, "**") self.assertEqual(response.status_code, 200)
为什么要这么做?
Django的View类的__init__方法默认只接受关键字参数,而as_view()方法是Django专门设计用来处理类视图到可调用视图函数的转换的——它会帮我们处理请求分发(比如把POST请求传给post方法)、初始化类实例等逻辑,这是测试类视图的标准姿势哦。
内容的提问来源于stack exchange,提问作者AshishRay94
相关产品推荐
相关产品推荐

