无法在Django unittest中将用户添加到新组中

问题描述 投票:0回答:1

将用户添加到新组(在Django单元测试中)会导致Django.core.exceptions.FieldError

此例外让我感到难过。在使用rest_framework APITestCases之前,我只是编写以下单元测试作为示例来学习Django单元测试系统。

TLDR;

我已重置我的环境,并在Django调试交互式环境中使用相同的代码进行了测试,并尝试通过多种方式向用户添加。单元测试仍然失败,调试外壳仍然有效...

详细信息

我编写了以下测试(出于谨慎,我省略了assert语句...)

class modelsTests(TestCase):
    def testUserModel(self):
        # we should begin with no users...
        self.assertEquals(
            User.objects.count(),
            0
        )

        # create some demo users, 2 exactly...
        User.objects.create(username="test user", email="[email protected]")
        # add the first user to a group, not the second
        Group.objects.create(name="Test")
        user = User.objects.first()
        user.groups.add(Group.objects.get(name="Test"))
        # create the second user without any groups
        User.objects.create(username="another user", email="[email protected]")

然后我运行测试(在代码段后包含几个assert语句),py manage.py test testdrivendevelopment.tests这将返回以下错误代码和堆栈跟踪,

Creating test database for alias 'default'...
System check identified no issues (0 silenced).
F.E
======================================================================
ERROR: testUserModel (testdrivendevelopment.tests.test_models.modelsTests)
----------------------------------------------------------------------
Traceback (most recent call last):
  File "C:\Users\alber\OneDrive - UTS\UTS\ProgSoc\TDD workshop\testdrivendevelopment\tests\test_models.py", line 40, in testUserModel
    users_in_test = User.objects.filter(groups_name="Test")
  File "C:\Users\alber\ONEDRI~1\UTS\ProgSoc\TDDWOR~1\lib\site-packages\django\db\models\manager.py", line 82, in manager_method
    return getattr(self.get_queryset(), name)(*args, **kwargs)
  File "C:\Users\alber\ONEDRI~1\UTS\ProgSoc\TDDWOR~1\lib\site-packages\django\db\models\query.py", line 904, in filter
    return self._filter_or_exclude(False, *args, **kwargs)
  File "C:\Users\alber\ONEDRI~1\UTS\ProgSoc\TDDWOR~1\lib\site-packages\django\db\models\query.py", line 923, in _filter_or_exclude
    clone.query.add_q(Q(*args, **kwargs))
  File "C:\Users\alber\ONEDRI~1\UTS\ProgSoc\TDDWOR~1\lib\site-packages\django\db\models\sql\query.py", line 1350, in add_q
    clause, _ = self._add_q(q_object, self.used_aliases)
  File "C:\Users\alber\ONEDRI~1\UTS\ProgSoc\TDDWOR~1\lib\site-packages\django\db\models\sql\query.py", line 1381, in _add_q
    check_filterable=check_filterable,
  File "C:\Users\alber\ONEDRI~1\UTS\ProgSoc\TDDWOR~1\lib\site-packages\django\db\models\sql\query.py", line 1250, in build_filter
    lookups, parts, reffed_expression = self.solve_lookup_type(arg)
  File "C:\Users\alber\ONEDRI~1\UTS\ProgSoc\TDDWOR~1\lib\site-packages\django\db\models\sql\query.py", line 1087, in solve_lookup_type
    _, field, _, lookup_parts = self.names_to_path(lookup_splitted, self.get_meta())
  File "C:\Users\alber\ONEDRI~1\UTS\ProgSoc\TDDWOR~1\lib\site-packages\django\db\models\sql\query.py", line 1483, in names_to_path
    "Choices are: %s" % (name, ", ".join(available)))
django.core.exceptions.FieldError: Cannot resolve keyword 'groups_name' into field. Choices are: date_joined, email, first_name, groups, id, is_active, is_staff, is_superuser, last_login, last_name, logentry, password, post, user_permissions, username

此异常似乎表明我将组错误地传递给用户以添加它!但是,我通过快速搜索在this question中看到了。我也可以做相反的事情,并将用户从组对象添加到组中。尝试过并获得相同的堆栈跟踪后,我转向了Django调试控制台。复制和粘贴本例中预期的相同代码和导入的内容

总而言之,如果这似乎是如此失败,那么如何测试将用户添加到组中? 为什么的奖励积分。

发布此文章之前,我已经咨询了以下内容,

django django-models django-rest-framework django-testing django-tests
1个回答
0
投票

创建用户方法如下

 User.objects.create_user(username="test user", email="[email protected]")
© www.soinside.com 2019 - 2024. All rights reserved.