我有一些模型具有 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 时如何测试?
请您参考如下方法:
问题是 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 标志运行它,然后它将读取非托管模型(没有表)并为该测试临时创建这些表(基于模型)不会像您看到的那样出错。
这将允许您像编写所有其他托管模型一样为该模型编写测试,而不必再担心非托管模型可能会在您的应用程序中出现问题。
