2009-09-07 6 views
1

django unittests 라이브러리를 시도하는 동안 몇 가지 문제가 있습니다. 뭔가 이상한 상황이 발생합니다Django unittests : 모델이 이미 등록되었습니다. 오류

---------------------------------------------------------------------- Unit Test Code Coverage Results 
---------------------------------------------------------------------- Traceback (most recent call last): File "manage.py", line 11, in <module> 
    execute_manager(settings) File "/opt/local/lib/python2.5/site-packages/Django-1.0.2_final-py2.5.egg/django/core/management/__init__.py", line 340, in execute_manager 
    utility.execute() File "/opt/local/lib/python2.5/site-packages/Django-1.0.2_final-py2.5.egg/django/core/management/__init__.py", line 295, in execute 
    self.fetch_command(subcommand).run_from_argv(self.argv) File "/opt/local/lib/python2.5/site-packages/Django-1.0.2_final-py2.5.egg/django/core/management/base.py", line 192, in run_from_argv 
    self.execute(*args, **options.__dict__) File "/opt/local/lib/python2.5/site-packages/Django-1.0.2_final-py2.5.egg/django/core/management/base.py", line 219, in execute 
    output = self.handle(*args, **options) File "/opt/local/lib/python2.5/site-packages/Django-1.0.2_final-py2.5.egg/django/core/management/commands/test.py", line 33, in handle 
    failures = test_runner(test_labels, verbosity=verbosity, interactive=interactive) File "/opt/local/lib/python2.5/site-packages/django_test_coverage-0.1-py2.5.egg/django-test-coverage/runner.py", line 58, in run_tests 
    modules.extend(_package_modules(*pkg)) File "/opt/local/lib/python2.5/site-packages/django_test_coverage-0.1-py2.5.egg/django-test-coverage/runner.py", line 92, in _package_modules 
    modules.append(__import__(impstr + '.' + name, {}, {}, [''])) File "/Users/oleg/jin/goclub/trunk/jin/goserver/admin.py", line 11, in <module> 
    admin.site.register(ActiveList, ActiveListAdmin) File "/opt/local/lib/python2.5/site-packages/Django-1.0.2_final-py2.5.egg/django/contrib/admin/sites.py", line 64, in register 
    raise AlreadyRegistered('The model %s is already registered' % model.__name__) django.contrib.admin.sites.AlreadyRegistered: The model ActiveList is already registered silver:jin oleg$ 

관리 파일은 다음과 같습니다 :

코드의 실행 후 오류 다음 반환

from django.core import management 
from django.test import TestCase 
from django.test.client import Client 
from django.core import mail 
from django.test.utils import setup_test_environment 
from django.contrib.auth.models import User 
from django.db import connection 
from goserver.models import ActiveList 

class GoserverTestCase(TestCase): 
    #fixtures = ['dat.json'] 

    def setUp(self): 
     pass 

    def test_active_list_works(self): 
     c = Client() 
     response = c.post('/') 
     #print response.status_code 
     self.assertEquals(True, True) 

그러나 :

내가 이런 테스트를 정의

from goserver.models import ActiveList, Game 
from django.contrib import admin 

class ActiveListAdmin(admin.ModelAdmin): 
    list_display = ('user', "is_Bot", "isActive") 

admin.site.register(ActiveList, ActiveListAdmin) 
admin.site.register(Game) 

나는이 모든 방법으로 실행합니다 : python manage.py test goserver

또한, 내가 선을 제거하면 C = 클라이언트() 응답 = c.post가 ('/') 테스트 케이스 정의에서

, 다음 오류가

답변

4

추적을 보면 앱의 admin.py을 가져 오는 django_test_coverage-0.1이라는 앱이있는 것으로 보입니다.

yourapp.admin과는 반대로 yourproject.yourapp.admin과 같은 다른 위치에서 가져 오는 것일 수 있습니다. 기술적으로 다른 모듈로 간주되기 때문에 다시 가져오고 admin.site.register 번의 호출이 다시 이루어집니다. 이로 인해 AlreadyRegistered 오류가 발생합니다.

제 제안은 django_test_coverage 앱을 삭제하거나 수정하는 것입니다.

+1

비슷한 문제가 있습니다. 내가 장고 - 코 옵션 - 커버 - 포괄적 인 커버 리지 보고서에서 작업 디렉토리 아래에있는 모든 파이썬 파일을 포함 사용했다. –

+0

@ArthurAlvim --cover-inclusive 옵션으로 코를 실행하면서이 문제를 해결할 수 있습니까? – goldstein

+0

@ goldstein 나는 django-nose + coverage를 사용하는 것을 포기했습니다. 대신, 나는 장고 커버리지를 별도로 사용하고있다. https://bitbucket.org/kmike/django-coverage 또는 github 미러 https://github.com/kmike/django-coverage에서 확인하십시오. –

0

내 질문에 나타나지 않는 것으로 나타났습니다

  • TestCase의 기본 유형/클래스가 무엇인지 알지 못합니다. 장고 테스트입니까, 아니면 Unittest입니까? 장고에서 사용하는 것이 더 좋습니다
  • 어떻게 테스트를 실행합니까? 장고 내부 테스트 명령을 사용하여, 코에 의해 unittest에 의해? Traceback I thing test 명령을 사용하면 확실하지 않습니다.
  • ActiveAdminList 및 ActiveList에 대한 정의는 무엇입니까? 아마 Meta에서 Admin 클래스가 있을까요?
+0

답변 해 주셔서 감사합니다! 원래 설명에 필요한 정보를 추가했습니다. –

+0

ActiveList 모델의 내용을 붙여 넣을 수 있습니까?, 문제가 될 수 있다고 생각합니다. – bluszcz

0

나는이 문제를 해결하기 위해 admin.autodiscover() 행을 주석으로 처리합니다.

관련 문제