python - 如何从 ViewSet 类创建 Django REST Framework View 实例?
问题描述
我正在尝试对Django REST Framework 视图集权限进行单元测试,原因有两个:速度和简单性。为了与这些目标保持一致,我还想避免使用任何模拟框架。基本上我想做这样的事情:
request = APIRequestFactory().post(…)
view = MyViewSet.as_view(actions={"post": "create"})
self.assertTrue(MyPermission().has_permission(request, view))
这种方法的问题在于它view
实际上不是一个View
实例,而是一个对实例执行某些操作的函数View
,并且它没有我在 中使用的某些属性has_permission
,例如action
. 如何构造View
可以传递给的实例类型has_permission
?
权限已经在集成和接受级别进行了测试,但我想避免创建几个复杂且耗时的测试来简单地检查每个相关操作是否受到保护。
我已经能够通过猴子修补视图集实例并手动调度它来解决这个问题:
view_set = MyViewSet()
view_set.action_map = {"post": "create"}
view_set.dispatch(request)
解决方案
您可以执行以下操作。
request = APIRequestFactory().post(…)
view_obj = MyViewSet()
self.assertTrue(MyPermission().has_permission(request, view_obj))
推荐阅读
- python - 从opencv生成的图像(没有numpy)上的给定两个点没有正确计算坡度角度
- java - 如何确保 gradle 仅在将应用程序构建到 100% 后才执行主类?
- rstudio - 在计算发育迟缓患病率置信区间时,我必须考虑哪些变量?
- c# - 如何在标签c#中以windows窗体显示数据库表的所有列
- android - 我能知道 .txt 文件在“context.openFileInput("txt")”中的位置吗
- scala - 使用 fs2 将 URL 流式传输到本地文件
- css - 页面重新加载后,Django保持下拉选择的语言
- python - 如果列中超过 90% 的值为 0,则删除 Dataframe 中的列
- c - 如果我正在制作文件路径,哪些应该更快?
- php - HTML Select 值属性拆分结果到多个字符串