2009-09-07 4 views
1

Я сталкиваюсь с несколькими проблемами при попытке библиотеки django unittests. Что-то странное происходит:Django unittests: модель уже зарегистрирована Ошибка

Я определил тест, как это:

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) 

Но после выполнения кода он возвращает следующую ошибку:

---------------------------------------------------------------------- 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 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

Также заметил, что если удалить строки с = Client() ответ = c.post ('/')

из определения тестового примера, то ошибка не появляется

ответ

4

Глядя на TRACEBACK, похоже, у вас есть приложение под названием django_test_coverage-0.1 который импортируя вашего приложения admin.py.

Возможно, это импорт из другого места, например yourproject.yourapp.admin, в отличие от yourapp.admin. Поскольку он технически рассматривается как другой модуль, он повторно импортируется и вызовы admin.site.register выполняются снова. Это вызывает ошибку AlreadyRegistered.

Мое предложение было бы удалить django_test_coverage приложение (или исправить).

+1

У меня есть аналогичная проблема. Я использовал django-нос с опцией --cover-inclusive, которая включает все файлы python в рабочем каталоге в отчете о покрытии. –

+0

@ArthurAlvim Вам удалось решить эту проблему, а также использовать нос с опцией --cover-inclusive? – goldstein

+0

@goldstein Я сдался, пытаясь использовать django-nose + coverage. Вместо этого я использую django-покрытие отдельно. Дайте чек в https://bitbucket.org/kmike/django-coverage или зеркало github https://github.com/kmike/django-coverage. –

0

Мои вопросы,

  • Я не вижу, что является базовым типом/классом для TestCase - это Django Test one или Unittest? лучше использовать от Django
  • Как вы проводите тест? используя внутреннюю тестовую команду Django, носом, путем unittest? По Traceback я тестирую команду, но я не совсем уверен.
  • Что вы определяете для ActiveAdminList и ActiveList? У вас есть класс Admin в мета?
+0

Спасибо за ответ! Я добавил необходимую информацию к исходному описанию –

+0

Можете ли вы вставить содержимое модели ActiveList ?, Я думаю, что может быть проблема. – bluszcz

0

Я решаю это, комментируя строку admin.autodiscover() в proye

Смежные вопросы