【问题标题】:Mocking model.User using mixer throughs error模拟模型。用户使用混音器通过错误
【发布时间】:2021-06-11 06:19:43
【问题描述】:

我正在尝试为我的 Django 项目添加单元测试。我使用混音器来模拟模型。 模型如下图

from django.contrib.auth.models import User

class Mytable(Model):
    username = models.OneToOneField(User, on_delete=models.CASCADE, db_column='username')
    ...
    ...

我的测试用例看起来像

class MyTest:
    def test_test1(self):
        mock_user = mixer.blend('django.contrib.auth.models.User')
        stock_mock = mixer.blend('app.Mytable', username=mock_user)

但我在模拟用户模型时遇到了“太多的值无法解包”

Traceback (most recent call last):
  File "<console>", line 1, in <module>
  File "/Users/kketan/Documents/projects/Extractor/.venv/lib/python3.8/site-packages/mixer/main.py", line 566, in blend
    type_mixer = self.get_typemixer(scheme)
  File "/Users/kketan/Documents/projects/Extractor/.venv/lib/python3.8/site-packages/mixer/main.py", line 583, in get_typemixer
    return self.type_mixer_cls(
  File "/Users/kketan/Documents/projects/Extractor/.venv/lib/python3.8/site-packages/mixer/main.py", line 47, in __call__
    cls_type = cls.__load_cls(cls_type)
  File "/Users/kketan/Documents/projects/Extractor/.venv/lib/python3.8/site-packages/mixer/backend/django.py", line 137, in __load_cls
    app_label, model_name = cls_type.split(".")
ValueError: too many values to unpack (expected 2)

我是否以正确的方式嘲笑模型?如果是,这个错误是否已知?如果没有,你能建议更好的方法吗?

【问题讨论】:

    标签: python django pytest pytest-django django-mixer


    【解决方案1】:

    来自混音器的documentation

    您可以在模型名称中使用类或字符串。

    [1] 模型名称支持两种格式。使用‘app_name.model_name’ 防止冲突。或者你可以只使用“model_name”的模型 唯一的名称。

    因此,您编写型号名称的格式不正确。您需要以&lt;pp_name&gt;.&lt;model_name&gt; 的形式编写它。因此,您需要写 'auth.User',而不是 'django.contrib.auth.models.User'

    class MyTest:
        def test_test1(self):
            mock_user = mixer.blend('auth.User')
            stock_mock = mixer.blend('app.Mytable', username=mock_user)
    

    【讨论】:

    • 我没有找到身份验证。我应该添加 python 路径直到 auth 吗?身份验证也不是我创建的。它由 django 提供的默认身份验证应用程序
    • @ketankhandagale 你的INSTALLED_APPS 设置中没有django.contrib.auth.models.User 吗?还要将此错误的 full 堆栈跟踪添加到您的问题中。您是否尝试过以这种方式 (from auth import User) 或其他方式导入?如果这样不起作用,这仅用于在 fks 和其他几个地方将模型称为字符串。
    • 是的,我已经在设置中添加了它。但仍然是同样的错误。
    猜你喜欢
    • 2010-11-17
    • 2011-02-18
    • 1970-01-01
    • 1970-01-01
    • 2020-05-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-04-17
    相关资源
    最近更新 更多