如何解决具有多个数据库的 Django 测试TestCase失败
我在 django 应用程序上使用了 2 个数据库 - 第一个是 MysqL,第二个是 Mongo(使用 djongo 引擎)。
我开始使用 TestCase
编写一些测试,我想使用 sqlite3 引擎。
我的数据库配置: (你可以看到我在 sqlite 上分配了 TEST DB]
#settings.py
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.MysqL','NAME': DEFAULT_NAME,'USER': DEFAULT_USER,'PASSWORD': DEFAULT_PASSWORD,'HOST': 'my-host-here','PORT': '3306','TEST': {
'NAME': 'test_dev'
}
},'mongoDB': {
'ENGINE': 'djongo','CLIENT': {
'host': 'mongodb+srv://{}:{}@{}/?retryWrites=true&w=majority'.format(
username,password,host),'username': username,'password': password,'name': name,'authSource': authSoruce,'ssl':ssl,'authMechanism': 'SCRAM-SHA-1',}
}
}
# If django runs unittests - run on a local sqlite DB
if 'test' in sys.argv:
DATABASES['default'] = {
'ENGINE': 'django.db.backends.sqlite3','NAME': 'mydatabase','SUPPORTS_TRANSACTIONS': True
}
DATABASES['mongoDB'] = {
'ENGINE': 'django.db.backends.sqlite3','NAME': 'mydatabase2','SUPPORTS_TRANSACTIONS': True
}
当我运行测试时,当 Django 尝试创建 mongoDB TEST 数据库时我会失败。错误:
return Database.Cursor.execute(self,query,params) django.db.utils.OperationalError: no such table: release_notes_releasenotesformmodel
(release_notes_releasenotesformmodel
是我在 mongoDB 中唯一的模型)
测试脚本:
databases = '__all__'
def SetUp(self):
self.client = Client()
self.dummy_test = EdisonAbTestsListModel.objects.create(
test_id=DUMMY_TEST_ID_1
)
def run_test(self):
## here is my test logic...
如您所见,我尝试在 TestCase 配置中使用 databases = '__all__'
,但它无济于事
编辑:这是 release_notes_releasenotesformmodel
模型:
class Meta:
db_table = 'release_notes'
_DATABASE = "edison_mongo"
# Automated fields
created_at = models.DateTimeField(auto_Now_add=True,editable=False)
updated_at = models.DateTimeField(auto_Now=True)
# Model Fields
'''
test_id is actually the primary key in to EdisonAbTestsListModel
Notice: for 'full_rollout' RNs,test_id is populated but has no meaning.
for 'full_rollout' RNs The minimum id should match FULL_ROLLOUT_RN_MINIMUM_ID from views.py
'''
test_id = models.IntegerField(primary_key=True)
release_note_title = models.CharField(max_length=300,blank=True,null=False)
user_group = models.CharField(max_length=200,null=True)
tl_dr = models.CharField(max_length=10000,null=True)
owner = models.CharField(max_length=200,null=True)
dev_owner = models.CharField(max_length=200,null=True)
data_owner = models.CharField(max_length=200,null=True)
ds_owner = models.CharField(max_length=200,null=True)
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。