繁体   English   中英

如何为管理员保存功能编写单元测试

[英]How to write unit test for admin save function

我已经自定义save_model管理员,即

class MyModelAdmin(admin.ModelAdmin):
    def save_model(self, request, obj, form, change):
        # some more question code here
        obj.save()

现在,我想测试 MyModelAdmin save_model功能。 我尝试发布如下:

class MyModelAdminSaveTestCase(TestCase):
    def setUp(self):

        # setup code here

    def test_save_model(self):
        '''Test add employee
        '''
        my_obj = {
            'name': 'Tester',
            'address': '12 test Test',
            'city': 'New York',
            'state': 'NY',
        }

        self.client.login(username=self.user, password=self.pwd)
        response = self.client.post(reverse('admin:mymodel_mymodel_add'), my_obj, follow=True)

        self.assertEqual(response.status_code, 200)

        self.assertEqual(MyModel.objects.count(), 1)

但是,测试失败:

self.assertEqual(MyModel.objects.count(), 1)
AssertionError: 0 != 1

我的回答晚了 5 年,但也许它对其他人有帮助。

要访问 django 管理员用户需要有is_staff=True 非员工用户被重定向到登录页面(这可能是上面示例中发生的情况)。

此外,用户需要有足够的权限才能访问特定的管理页面(如果您不需要测试权限,则简单的解决方法是设置is_superuser=True )。

所以像这样的客户端设置可能会解决这个问题:

user = User.objects.create_superuser(username='super', 
                                     email='super@email.org', 
                                     password='pass')
client.login(username=user.username, password='pass')
# now you can access django admin

如果出现问题,您可以检查response.context_data以获取更多信息。

但在我看来,还有一种更简洁的方法来测试save_model ,请参阅这个答案

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM