【问题标题】:How to run django test when managed=False当 managed=False 时如何运行 django 测试
【发布时间】:2019-04-16 18:16:39
【问题描述】:

我有一些型号有managed=False。因此,我的测试由于无法找到表而失败

我已点击此链接 https://dev.to/patrnk/testing-against-unmanaged-models-in-djangohttps://github.com/henriquebastos/django-test-without-migrations 来设置自定义测试运行器。

跑步者确实跑了,但我仍然遇到同样的问题,我不知道为什么。

我的 django 版本是 2.1

managed=False时如何测试?

【问题讨论】:

  • 您的迁移文件是什么样的?您确定在运行测试时已经定义了设置吗?你得到什么错误输出?

标签: python django


【解决方案1】:

问题 - Django 希望迁移在那里!

但这是一个非托管模型 - 所以它没有迁移!因此,您遇到了问题。是的,您应该做一些事情,例如添加 setting 以检查您是否在测试中,如下所示:

class Meta(object):
    db_table = 'your_db_table'
    managed = getattr(settings, 'UNDER_TEST', False)

在我的settings.py 中,我有一个名为UNDER_TEST 的变量

# Create global variable that will tell if our application is under test
UNDER_TEST = (len(sys.argv) > 1 and sys.argv[1] == 'test')

这将检查 test 是否是命令中的参数(在测试时它是),因此它将在测试时将 UNDER_TEST 设置为 True 并且 Django 会将其视为托管模型(所以你会看到表不存在的错误)...所以...

你可以尝试(我觉得效果很好)是django-pytest,这是一种很容易将pytest 带入django 的方法。 django-pytest 更加更新并保持现代感(它在幕后使用pytest - 它本身就是充实且令人敬畏的)。

好的部分?您可以使用--no-migrations 标志运行它,然后它将读取非托管模型(没有表)并为该测试临时创建这些表(基于模型),而不会像您看到的那样出错。

这将允许您像编写所有其他托管模型一样为该模型编写测试,并且不再需要担心非托管模型可能会成为您的应用程序中的问题。

【讨论】:

    猜你喜欢
    • 2011-10-24
    • 2019-05-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-06-20
    • 1970-01-01
    • 2012-08-01
    相关资源
    最近更新 更多