Skip to main content
 首页 » 编程设计

python之managed=False 时如何运行 django 测试

2024年09月03日35shanyou

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

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