我有一些型号带有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
的时间?
答案 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
标志运行它,然后它将读取非托管模型(没有表)并为该测试临时创建这些表(基于模型),而不会像您看到的那样出错
这将使您可以像其他所有托管模型一样为该模型编写测试,而不必担心非托管模型可能会在应用程序中引起问题。