Managed = False时如何运行Django测试

时间:2018-11-13 20:32:09

标签: python django

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

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

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

我的Django版本是2.1

我如何测试managed=False的时间?

1 个答案:

答案 0 :(得分: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标志运行它,然后它将读取非托管模型(没有表)并为该测试临时创建这些表(基于模型),而不会像您看到的那样出错

这将使您可以像其他所有托管模型一样为该模型编写测试,而不必担心非托管模型可能会在应用程序中引起问题。