【问题标题】:Testing customized django user class测试自定义的 django 用户类
【发布时间】:2014-06-01 20:28:34
【问题描述】:

我的目标: 保存用户时,将用户名设置为电子邮件地址

测试类userAccount/tests.py:

#----------------------------------------------------------------------#
#   Test that the User is saved correctly 
#----------------------------------------------------------------------#
class UserAccountTests(TestCase):

    # assert that a users email address is saved as the username also
    def test_username_is_email(self):
        from userAccount.models import *
        from django.contrib.auth.hashers import make_password
        user_email = u"testuser@baflist.com",
        test_user = User.objects.create(
                first_name="test", 
                last_name="user",
                email="testuser@baflist.com",
                password=make_password("whatever")
                )

        self.assertEqual(test_user.username, user_email)

我的解决方案userAccount/models.py

from django.contrib.auth.models import User as DjangoUser

class User(DjangoUser):
    def save(self, *args, **kwargs):
        self.username = self.email
        super(User, self).save(*args, **kwargs) 

我对 django(和网络开发)还是新手,所以我不确定是否有更好的方法来做到这一点..?也许通过某种方式实现AbstractBaseUser

我的主要问题是测试失败,因为:

======================================================================
FAIL: test_username_is_email (userAccount.tests.UserAccountTests)
----------------------------------------------------------------------
Traceback (most recent call last):
  File "/Users/bdhammel/Documents/web_development/baflist/baflist/userAccount/tests.py", line 55, in test_username_is_email
    self.assertEqual(test_user.username, user_email)
AssertionError: 'testuser@baflist.com' != (u'testuser@baflist.com',)

为什么/如何将user_email 转换为元组?

【问题讨论】:

    标签: django django-testing django-tests


    【解决方案1】:

    您在测试中的电子邮件后面有一个逗号。这会将您的变量转换为元组。

    特别是这一行:

        user_email = u"testuser@baflist.com",
    

    删除尾随逗号以修复它,如下所示:

        user_email = u"testuser@baflist.com"
    

    【讨论】:

    • 啊,是的,我愿意。我使用继承 django User 模型可以吗?
    • @Ben:是的,继承很好,但你应该注意,你需要告诉 Django 你正在使用自定义用户模型。只需设置AUTH_USER_MODEL 即可完成:docs.djangoproject.com/en/dev/ref/settings/…
    • 太好了,谢谢。但是,设置AUTH_USER_MODEL='userAccount.User' 会返回一个CommandError:,说User 依赖于auth.User,需要设置为settings.AUTH_USER_MODEL。这似乎造成了一个循环逻辑问题。
    • @Ben: 我的错,你的模型应该继承 AbstractBaseUser 而不是 User: docs.djangoproject.com/en/dev/topics/auth/customizing/… 之后它会正常工作:)
    猜你喜欢
    • 2023-03-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-03-28
    • 2012-03-04
    • 1970-01-01
    • 2015-08-10
    • 2019-03-31
    相关资源
    最近更新 更多