gpt4 book ai didi

django - 在 Django 中使用非托管表运行测试

转载 作者:行者123 更新时间:2023-12-04 12:48:11 25 4
gpt4 key购买 nike

我的 django 应用程序使用不受管理的表,并且在我的模型中定义了以下内容,如下所示:

class Meta:
managed = False
db_table = 'mytable'

当我运行一个简单的测试来导入这个人时,我得到以下信息:
(person)bob@sh ~/person/dapi $  > python manage.py test
Creating test database for alias 'default'...
DatabaseError: (1060, "Duplicate column name 'db_Om_no'")

tests.py 非常简单,如下所示:
import person.management.commands.dorecall
from person.models import Person
from django.test import TestCase
import pdb

class EmailSendTests(TestCase):
def test_send_email(self):
person = Person.objects.all()[0]
Command.send_email()

我确实读过 django docs它说“对于涉及带有 managed=False 的模型的测试,由您来确保创建正确的表作为测试设置的一部分。”。所以我明白我的问题是我没有创建合适的表。那么我应该在 test_person 中创建表的副本吗?测试框架创建的数据库?

每次我运行测试时, test_person db 被破坏(我认为)并重新设置,所以我应该如何在 test_person 中创建表的副本.我这样想对吗?

更新:

我看到了 this question on SO并添加了 ManagedModelTestRunner()utils.py .虽然 ManagedModelTestRunner()确实运行(通过插入 pbd.set_trace() 确认),我仍然得到 Duplicate column name错误。我这样做时没有错误 python manage.py syncdb (尽管这可能意义不大,因为表已经创建了 - 将尝试删除表并重新运行 syncdb 以查看是否可以获得任何线索)。

最佳答案

我遇到了同样的问题,我有一个非托管的旧数据库,该数据库也在模型元属性中设置了自定义数据库名称。

使用托管模型测试运行器运行测试,正如您所链接的,解决了我的一半问题,但我仍然遇到 Django 不知道 custom_db 名称的问题:

django.db.utils.ProgrammingError: relation "custom_db" does not exist

问题是 ./manage.py makemigrations仍然创建所有模型的定义,无论是否托管,并在定义中包含您的自定义数据库名称,这似乎会破坏测试。通过安装:
pip install django-test-without-migrations==0.2

并运行这样的测试:
./manage.py test --nomigrations

我能够针对我的非托管模型编写测试而不会出现任何错误。

关于django - 在 Django 中使用非托管表运行测试,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18085245/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com