微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

具有多个数据库的 Django 测试TestCase失败

如何解决具有多个数据库的 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 举报,一经查实,本站将立刻删除。