Tre*_*ewq 7 django django-testing
我的django应用程序使用未管理的表,并在我的模型中定义如下:
class Meta:
managed = False
db_table = 'mytable'
Run Code Online (Sandbox Code Playgroud)
当我运行一个导入该人的简单测试时,我得到以下内容:
(person)bob@sh ~/person/dapi $ > python manage.py test
Creating test database for alias 'default'...
DatabaseError: (1060, "Duplicate column name 'db_Om_no'")
Run Code Online (Sandbox Code Playgroud)
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()
Run Code Online (Sandbox Code Playgroud)
我确实读过django docs,其中说"对于涉及使用managed = False的模型的测试,由你来确保在测试设置中创建正确的表格." 所以我明白我的问题是我没有创建合适的表.所以我应该test_person在测试框架创建的db中创建表的副本吗?
每次我运行测试时,test_persondb都会被破坏(我认为)并重新设置,所以我应该如何创建表的副本test_person.我在考虑这个吗?
更新:
我看到的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
Run Code Online (Sandbox Code Playgroud)
问题是,./manage.py makemigrations仍然创建所有模型的定义,无论是否托管,并在定义中包含自定义数据库名称,这似乎会破坏测试。通过安装:
pip install django-test-without-migrations==0.2
Run Code Online (Sandbox Code Playgroud)
并运行这样的测试:
./manage.py test --nomigrations
Run Code Online (Sandbox Code Playgroud)
我能够针对我的非托管模型编写测试,而不会出现任何错误。
| 归档时间: |
|
| 查看次数: |
1336 次 |
| 最近记录: |