2009-09-07 12 views
1

Je rencontre plusieurs problèmes en essayant la bibliothèque django unittests. Quelque chose d'étrange se produit:Django unittests: Le modèle est déjà enregistré Erreur

J'ai défini le test comme celui-ci:

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) 

Mais après l'exécution du code, il renvoie l'erreur suivante:

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

fichier Admin ressemble à ceci:

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) 

Je l'exécute de la manière suivante: python manage.py test goserver

aussi remarqué que si je supprime les lignes c = Client() réponse = c.post ('/')

à partir d'une définition de cas de test, aucune erreur apparaît

Répondre

4

En regardant le retraçage, il semble que vous avez une application appelée django_test_coverage-0.1 qui importe votre application de admin.py.

Il est probablement importer à partir d'un emplacement différent, tel que yourproject.yourapp.admin par opposition à yourapp.admin. Comme il est techniquement vu comme un module différent, il est réimporté et les appels admin.site.register sont à nouveau effectués. Cela provoque l'erreur AlreadyRegistered. Ma suggestion serait d'enlever l'application django_test_coverage (ou le réparer).

+1

J'ai un problème similaire. J'utilisais django-nose avec l'option --cover-inclusive qui inclut tous les fichiers python dans le répertoire de travail du rapport de couverture. –

+0

@ArthurAlvim Avez-vous réussi à résoudre cela tout en courant le nez avec l'option - cover-inclusive? – goldstein

+0

@goldstein J'ai renoncé à essayer d'utiliser la couverture django-nose +. Au lieu de cela, j'utilise django-coverage séparément. Donnez un chèque dans https://bitbucket.org/kmike/django-coverage ou le miroir github https://github.com/kmike/django-coverage. –

0

Mes questions,

  • Je ne vois pas quel est le type/classe de base pour TestCase - est-ce un test de Django, ou d'Unittest? il est préférable d'utiliser à partir de Django
  • Comment lancez-vous le test? en utilisant la commande de test interne Django, par le nez, par unittest? En Traceback je pense commande de test, mais je ne suis pas tout à fait sûr.
  • Qu'est-ce que vous définissez pour ActiveAdminList et ActiveList? Avez-vous peut-être classe Admin dans Meta?
+0

Merci pour la réponse! J'ai ajouté les informations nécessaires à la description originale –

+0

Pouvez-vous coller le contenu du modèle ActiveList ?, Je pense qu'il pourrait y avoir un problème. – bluszcz

0

Je résous ce commentant la ligne admin.autodiscover() dans le proye