2017-03-14 3 views
3

사용자 정의 모델 필드가있는 응용 프로그램을 작성하고 있습니다. 테스트 중에 만 사용되는 모델을 사용하여 해당 필드를 테스트하려고하지만 모델에서 테스트를 수행하는 데 어려움을 겪고 있습니다. 테스트에만 사용되는 Django 모델 등록 방법

내 응용 프로그램 구조의 일부

는 다음과 같이이다 :
myapp/ 
    fields.py 
    models.py 
tests/ 
    fields/ 
     models.py 
     tests.py 
    settings.py 
    test_models.py 
    test_views.py 

tests/fields/models.py

이 같다 :

from django.db import models 
from myapp.fields import MyCustomField 

class MyTestModel(models.Model): 
    custom_field = MyCustomField() 

그때 MyTestModel을 가져 tests/fields/tests.py에서 사용하려고합니다.

것들 내가

1

가 처음에 내가 가진 ... 시도했다 :

RuntimeError: Model class tests.fields.models.MyTestModel doesn't declare an explicit app_label and isn't in an application in INSTALLED_APPS.

2

그래서 내가 tests/settings.pyINSTALLED_APPS"tests",을 추가했다. 하지만 내가 얻을 :

django.db.utils.OperationalError: no such table: tests_mytestmodel

3. 나는 시험에 신안 등록을 분리에 대한 this in the docs을 보았다.

from django.db import models 
from django.test import TestCase 
from django.test.utils import isolate_apps 
from myapp.fields import MyCustomField 

@isolate_apps('tests') 
class MyTestCase(TestCase): 

    def test_things_work(self): 
     class MyTestModel(models.Model): 
      custom_field = MyCustomField() 

     obj = MyTestModel.objects.create(custom_field='foo') 
     self.assertEqual(...) 

을하지만 여전히 나를 가져옵니다 : 그래서 tests/fields/tests.py로 모델을 이동 해봤

django.db.utils.OperationalError: no such table: tests_mytestmodel

나는 사용자 정의 필드를 제공하고 다른 장고 많은 프로젝트의 시험을 통해 찾고 시도했습니다 내가 분명치 않게 모델 테스트를 통해 실종 된 것을 볼 수는 없다.

어떻게 든 테스트에 사용 된 이러한 모델의 마이그레이션이 필요합니다. 맞습니까? 방법? 또는 다른 것? 테스트 응용 프로그램은 중첩 된 폴더에 있기 때문에

+0

무엇을 가리키는 동안 당신은'makemigrations' 명령을 실행하는 경우 '--settings'을 사용하여 테스트 설정에 적용 하시겠습니까? 테스트가 실행될 때 선택되는 테스트 응용 프로그램의 초기 마이그레이션을 제공해야합니다. –

+0

흠, 모델을 인식하지 못합니다 ("변경 사항 없음"). 아마 그것들을''tests/models.py''에 넣을 수는 있습니다.하지만 다른 곳에서는이 방법을 본적이 없습니다. –

+0

'tests.fields'를'tests' 대신'INSTALLED_APPS'에 추가해야한다고 생각합니다. –

답변

0

당신처럼, 대신 상위 폴더의 INSTALLED_APPS에서의 전체 경로를 지정해야합니다

INSTALLED_APPS = [ 
    ..., 
    "tests.fields" 
] 
+0

그래, 나는 그 폴더를 앱으로 생각하지 않았다. 나머지 테스트는 폴더에 없지만, 그 세트는'models.py'를 필요로한다. 그들은 함께 폴더에있다. 그리고'models.py'는 그것을 앱으로 만들고, 따라서 INSTALLED_APPS에 포함시킬 필요가 있다고 생각합니다. –