Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/blackberry/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在django中使用非托管表运行测试_Django_Django Testing - Fatal编程技术网

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

在django中使用非托管表运行测试,django,django-testing,Django,Django Testing,我的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, "D

我的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()
我确实读过其中的内容,其中说“对于涉及managed=False模型的测试,您需要确保在测试设置中创建正确的表。”。所以我知道我的问题是我没有创建适当的表。那么,我应该在测试框架创建的
test\u person
db中创建表的副本吗

每次我运行测试时,
test\u person
db都会被销毁(我想)并重新设置,那么我应该如何在
test\u person
中创建表的副本呢。我想的对吗

更新:


我在
utils.py
中看到并添加了
ManagedModelTestRunner()。虽然
ManagedModelTestRunner()
确实得到了运行(通过插入
pbd.set\u trace()
确认),但我仍然得到了
重复列名的错误。当我执行
python manage.py syncdb
时,我没有收到任何错误(尽管这可能并不意味着什么,因为已经创建了表-将尝试删除该表并重新运行syncdb以查看是否可以获得任何线索)。

我也有同样的问题,其中我有一个非托管的遗留数据库,该数据库在models元属性中也设置了自定义数据库名称

正如您链接到的,使用托管模型测试运行程序运行测试解决了我一半的问题,但我仍然存在Django不知道自定义_db名称的问题:

django.db.utils.ProgrammingError: relation "custom_db" does not exist
问题是,
/manage.py makemigrations
仍然会创建所有模型的定义,无论是否管理,并在定义中包含自定义db名称,这似乎会破坏测试。通过安装:

pip install django-test-without-migrations==0.2
并运行如下测试:

./manage.py test --nomigrations

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

我知道这篇文章很旧,但希望这能帮助别人。Lifesaver。谢谢。在Django中使用遗留数据库是PITA。