用于单元测试中后续请求的 Django ModelAdmin 对象?
Django ModelAdmin objects reused for subsequent requests in Unittests?
我正在尝试使用 Unittests 在 ModelAdmin 中重现一个(明显的)问题。
在 ModelAdmin 中,我在保存模型时执行了一些额外的操作。为此,我引入了新的实例变量 collection_page
.
class MyModelAdmin(admin.ModelAdmin):
...
def save_model(self, requset, obj, form, change):
...
if obj_is_new:
self.collection_page = ....
...
self.collection_page # <== AttributeError if obj is not new.
我使用 django.test.Client
测试模块两次,如下所示:
class CollectionAdminTestCase(django.test.TestCase):
...
def test_redirect_after_editing_existing_object(self):
self.client.post(
self.creation_path,
self.creation_post
)
response = self.client.post(
self.change_path,
self.change_post
)
self.assertEqual(
response.status_code, 302
)
测试通过,但应该会失败。
当我添加
try:
del self.collection_page
except AttributeError:
pass
在 MyModelAdmin
中 save_model
方法的开头,测试失败了。
这是 Django 的预期功能吗?有更好的处理方法吗?
您绝对不应该在 ModelAdmin 对象上设置状态。它在服务器进程的生命周期内存在;在其上设置的任何内容都将在请求中保留。
你没有说你在用这个变量做什么,所以很难就如何最好地做它是什么提出建议;只是,不是这样。
我正在尝试使用 Unittests 在 ModelAdmin 中重现一个(明显的)问题。
在 ModelAdmin 中,我在保存模型时执行了一些额外的操作。为此,我引入了新的实例变量 collection_page
.
class MyModelAdmin(admin.ModelAdmin):
...
def save_model(self, requset, obj, form, change):
...
if obj_is_new:
self.collection_page = ....
...
self.collection_page # <== AttributeError if obj is not new.
我使用 django.test.Client
测试模块两次,如下所示:
class CollectionAdminTestCase(django.test.TestCase):
...
def test_redirect_after_editing_existing_object(self):
self.client.post(
self.creation_path,
self.creation_post
)
response = self.client.post(
self.change_path,
self.change_post
)
self.assertEqual(
response.status_code, 302
)
测试通过,但应该会失败。
当我添加
try:
del self.collection_page
except AttributeError:
pass
在 MyModelAdmin
中 save_model
方法的开头,测试失败了。
这是 Django 的预期功能吗?有更好的处理方法吗?
您绝对不应该在 ModelAdmin 对象上设置状态。它在服务器进程的生命周期内存在;在其上设置的任何内容都将在请求中保留。
你没有说你在用这个变量做什么,所以很难就如何最好地做它是什么提出建议;只是,不是这样。