gpt4 book ai didi

django - 在 Django 中测试 admin.ModelAdmin

转载 作者:行者123 更新时间:2023-11-28 19:36:06 25 4
gpt4 key购买 nike

我正在尝试找出在 admin.py 中测试 admin.ModelAdmin 的最佳方法。具体来说,我正在覆盖我想要测试的 save_model() 函数。根据我所做的研究,我发现的唯一解决方案是编写请求/响应测试,然后查询数据库。

最佳答案

Udi's answer 中的建议,我们可以研究一下Django自己的ModelAdmin tests , 以确定 ModelAdmin 测试的基本成分。总结如下:

基本成分

除了Django TestCase 的东西,基本的成分是:

  1. AdminSite 的实例:

     from django.contrib.admin.sites import AdminSite
  2. 您的模型类和相应的 ModelAdmin(子)类:

     from my_app.models import MyModel
    from my_app.admin import MyModelAdmin
  3. (可选)根据您的需要,(模拟)请求和/或表格。

食谱

创建您的(自定义)ModelAdmin 实例需要前两个要素:

my_model_admin = MyModelAdmin(model=MyModel, admin_site=AdminSite())

基于ModelAdmin source ,默认的 save_model 实现只需要一个模型实例,因此可以调用它,例如,如下所示:

my_model_admin.save_model(obj=MyModel(), request=None, form=None, change=None)
# some test assertions here

这完全取决于您的save_model 做什么,以及您想要测试什么。假设您的 save_model 检查用户权限,那么除了模型实例之外,您还需要提供具有有效用户的 request(即第三种成分):

from unittest.mock import Mock

...

my_user = User.objects.create(...)
my_model_admin.save_model(
obj=MyModel(), request=Mock(user=my_user), form=None, change=None
)
# some test assertions here

这里我们使用unittest.mock.Mock创建模拟请求。基于Django测试source ,一个最小的 request 包含一个 Python object 和一个 user 属性。user 属性可以引用一个模拟用户,或者一个 actual instance。您的 AUTH_USER_MODEL,具体取决于您的需要。另一种方法是使用 django.test.RequestFactory .

这种基本方法也适用于其他 ModelAdmin 方法。

关于django - 在 Django 中测试 admin.ModelAdmin,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6498488/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com