ins*_*tor 32 django unit-testing django-admin
我试图找出测试的最佳方式admin.ModelAdmin
在admin.py
.具体来说,我重写了save_model()
我想测试的功能.根据我所做的研究,我发现的唯一解决方案是编写请求/响应测试,然后查询数据库.
djv*_*jvg 13
正如Udi的答案所建议的,我们可以研究Django自己的ModelAdmin测试,以确定测试的基本要素ModelAdmin
。总结如下:
除了Django外TestCase
,基本要素还包括:
的实例AdminSite
:
from django.contrib.admin.sites import AdminSite
Run Code Online (Sandbox Code Playgroud)您的模型类和相应的ModelAdmin
(子)类:
from my_app.models import MyModel
from my_app.admin import MyModelAdmin
Run Code Online (Sandbox Code Playgroud)(可选)根据您的需要,提供(模拟)请求和/或表格。
创建您的(自定义)实例需要前两个成分ModelAdmin
:
my_model_admin = MyModelAdmin(model=MyModel, admin_site=AdminSite())
Run Code Online (Sandbox Code Playgroud)
基于ModelAdmin源,默认save_model
实现仅需要模型的实例,因此可以按如下方式调用它:
my_model_admin.save_model(obj=MyModel(), request=None, form=None, change=None)
# some test assertions here
Run Code Online (Sandbox Code Playgroud)
这完全取决于您的save_model
工作以及要测试的内容。假设您save_model
检查用户权限,那么除了模型实例之外,您还需要通过有效用户传递请求(即第三种成分):
super_user = User.objects.create_superuser(username='super', email='super@email.org',
password='pass')
my_model_admin.save_model(obj=MyModel(), request=MockRequest(user=super_user),
form=None, change=None)
# some test assertions here
Run Code Online (Sandbox Code Playgroud)
MockRequest
下面定义了一个示例。基于Django测试源,最少的代码request
由object
具有user
属性的Python组成。根据您的需要,该user
属性可以引用模拟用户或您的实际实例AUTH_USER_MODEL
。
class MockRequest(object):
def __init__(self, user=None):
self.user = user
Run Code Online (Sandbox Code Playgroud)
此基本方法也适用于其他ModelAdmin
方法。
您可以为 modeladmin 指定自定义模型表单,然后简单地测试此模型表单;)
https://docs.djangoproject.com/en/1.8/ref/contrib/admin/#django.contrib.admin.ModelAdmin.form
形式
class SomeModelForm(forms.ModelForm):
class Meta:
model = SomeModel
Run Code Online (Sandbox Code Playgroud)
行政
class SomeModelAdmin(admin.ModelAdmin):
form = SomeModelForm
admin.site.register(SomeModel, SomeModelAdmin)
Run Code Online (Sandbox Code Playgroud)
测试
class TestSomeModel(TestCase):
def test_form(self):
form = SomeModelForm(**kwargs)
self.assertTrue(form.is_valid())
# ...
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
16790 次 |
最近记录: |