개발중인 앱에서 테스트를 실행하려고하는데 문제가 있습니다. 이 응용 프로그램은 구성 및 관계형 데이터 용 MySQL 데이터베이스와 관계형이 아닌 다른 레코드 용 MongoDB 데이터베이스라는 두 개의 데이터베이스를 사용합니다. 그것은 일반적으로 Y로 그냥 관계형 DB를 syncdb로 사용하고있을 때 작동합니다.하지만 테스트를 실행하려고하면 Django는 두 DB를 동기화하려고 시도하고 모델과 함께 mongo에서 오류가 발생하면서 충돌합니다. 어떤 제안? 여러 DB (MySQL 및 MongoDB)를 사용하여 Django에 대한 테스트 수행
이
는 DB의 구성입니다 :DATABASES = {
'default': {
'ENGINE': 'django.db.backends.mysql',
'NAME': 'app',
'USER': 'test',
'PASSWORD': 'test',
'HOST': '127.0.0.1',
'PORT': '3306',
},
'nonsql': {
'ENGINE' : 'django_mongodb_engine',
'NAME' : 'app',
'HOST': '127.0.0.1',
'PORT': 27017,
},
}
라우터 :
class AppRouter(object):
def db_for_read(self, model, **hints):
if model._meta.app_label == 'nonsql':
return 'nonsql'
return None
def db_for_write(self, model, **hints):
if model._meta.app_label == 'nonsql':
return 'nonsql'
return None
def allow_relation(self, obj1, obj2, **hints):
if obj1._meta.app_label == 'nonsql' or \
obj2._meta.app_label == 'nonsql':
return True
return None
def allow_syncdb(self, db, model):
if db == 'auth_db':
return model._meta.app_label == 'nonsql'
elif model._meta.app_label == 'nonsql':
return False
return None
테스트 코드 :
import pymongo
from django.test import TestCase
from app import views
from app.models import Car
from bson.objectid import ObjectId
from django.test import Client
import json
class CarTest(TestCase):
def setUp(self):
Operation.objects.create(id = ObjectId("5396d352421aa93f63ca45d5"), name = "Test Car", description= "Test Description",
start_date="2011-03-26 13:54:37.355", end_date="2014-09-11 13:54:37.355")
def test_adding_operation(self):
c = Client()
response = c.post('/cars/',{"name":"Test car 002", "description":"Test description car 002", "start_date":"2014-09-05 13:54:37.355", "end_date":"2014-09-11 13:54:37.355"})
content = json.loads(response.content)
# we expect to receive status success and an id
self.assertEqual("ok",content['status'])
self.assertNotEqual("",content['result'])
이 정보를 공유해 주셔서 감사합니다. –