Django 测试:如何模拟 django_app.get_model() 的 LookupError

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

我需要帮助来实现我的 Django 应用程序的测试。 这是我的序列化器中的一段代码,我想测试它:

        try:
            app_config = django_apps.get_app_config(BcConfig.name)
            app_model = django_apps.get_model(app_label=app_config.name,
                                              model_name=type_model_name)
            recording = app_model.objects.create(**recording)
        except LookupError:
            recording = None

如 Django docs 中所述,如果不存在此类应用程序或模型,则会引发 LookupError。

如何以编程方式模拟LookupError?

我尝试使用 ContentType 删除列出的模型,但 django_apps.get_model() 仍然有效。 我尝试使用 SchemaEditor 删除模型,但在 SQLite 中测试时无法正常工作。

我仍然找不到如何以编程方式删除模型或禁用 Django 应用程序。我很感激你的帮助。谢谢你。

django django-models django-tests django-apps
1个回答
0
投票

我尝试使用

ContentType
删除列出的模型,但
django_apps.get_model()
仍然有效。我尝试使用
SchemaEditor
删除模型,但在 SQLite 中测试时无法正常工作。

它不查看数据库。

django_apps
字典仅查看开始运行服务器时注册的模型。所以这些模型在数据库中并没有对应的表。

如果你想测试这个,你可以只传递无意义的值,例如:

type_model_name = 'my_non_existing_model_name'
try:
    app_config = django_apps.get_app_config(BcConfig.name)
    app_model = django_apps.get_model(
        app_label=app_config.name, model_name=type_model_name
    )
    recording = app_model.objects.create(**recording)
except LookupError:
    recording = None

但是话虽这么说,测试 Django 的功能通常没有多大意义:正确测试这些功能是 Django 开发人员的工作,而不是为 Django 构建应用程序的人的工作。他们的工作是测试他们在 Django 之上构建的功能。

© www.soinside.com 2019 - 2024. All rights reserved.