1

J'ai créé un site Web en utilisant django 1.3, Mongodb et django-mongo-engine. Lorsque j'exécute le serveur en utilisant "manage.py runserver", cela fonctionne. Mais quand j'essaie de faire des tests unitaires avec "manage.py test", ça échoue.Échec du test d'unité à l'aide de django-mongo-engine

Voici la settings.py à propos de la base de données:

DATABASES = { 
    'default': { 
     'ENGINE': 'django_mongodb_engine', 
     'NAME': 'sean_test',      
     'USER': '',      
     'PASSWORD': '',     
     'HOST': '',      
     'PORT': '',      
    } 
} 

Et ceci est le message d'erreur dans les tests:

.... Problème appareil installation « c: \ Python27 \ lib \ sitepackages \ django \ contrib \ auth \ fixtures \ authtestdata.json ': Traceback (appel le plus récent en dernier):

Fichier "c: \ Python27 \ lib \ paquets-de-site \ django \ core \ management \ commands \ loaddata. py ", ligne 174, dans handleobj.save (using = using)

Fichier "c: \ Python27 \ lib \ paquets-de-site \ django \ core \ serializers \ base.py", ligne 165, dans savemodels.Model.save_base (self.object, using = using, raw = True)

fichier "c: \ Python27 \ lib \ site-packages \ django \ db \ modèles \ base.py", ligne 573, dans save_baseresult = manager._insert (valeurs, return_id = update_pk, en utilisant =) à l'aide

fichier "c: \ Python27 \ lib \ site-packages \ django \ db \ modèles \ manager.py", ligne 195, en _insertreturn insert_query (self.model, valeurs, ** kwargs)

fichier « c : \ Python27 \ lib \ packages \ django \ db \ models \ query.py ", ligne 1438, dans insert_queryr etour query.get_compiler (en utilisant =) à l'aide .execute_sql (return_id)

fichier "c: \ Python27 \ lib \ site-packages \ djangotoolbox \ db \ basecompiler.py", ligne 369, dans execute_sqlvalue = self.convert_value_for_db (type_bdd, valeur)

fichier "c: \ Python27 \ lib \ site-packages \ django_mongodb_engine \ compiler.py", ligne 67, en wrapperreturn func (* args, ** kwargs)

fichier « c: \ Python27 \ lib \ paquets-de-site \ django_mongodb_engine \ compiler.py ", ligne 307, dans convert_value_for_dbraise InvalidId (msg)

InvalidId: Les valeurs AutoField (clé primaire par défaut) doivent être st anneaux représentant un ObjectId sur MongoDB (GOT U'1' au lieu)

Je sais que le django utilise entier tandis que MongoDB utilise la chaîne pour la clé primaire, mais je ne sais pas pourquoi le test échouera lorsque le " runserver "réussit. Une idée sur la façon de résoudre ce problème?

Merci!

+0

Je savais qu'en utilisant sqlite vous n'avez pas besoin de 'USER' et de 'PASSWORD' dans le fichier' settings.py', mais je ne sais pas utiliser 'mongodb', n'est-ce pas nécessaire? – eLRuLL

Répondre

0

Le problème est lié au chargement des appareils comme décrit dans this later question.

Vous pouvez le réparer en remplaçant les identifiants dans vos appareils avec les ObjectIds appropriés comme décrit dans the corresponding answer. De votre traceback, le problème est avec les appareils "authtestdata.json" fournis par django.contrib.auth. Comme ils ne sont pas compatibles avec ObjectIds, vous devez soit mettre à jour vos tests pour utiliser des appareils différents, soit ignorer les tests défaillants si vous ne pouvez pas les mettre à jour. Par exemple, les tests auth de Django ne passeront pas.

0

semble donc que vous n'avez pas la configuration de test pour se connecter à l'instance mongodb lorsque les tests en cours d'exécution parce que vous l'exécutez à partir commandline peut-être essayer de faire quelque chose comme ça

Vous disposez de 2 fichiers de paramètres, lsettings.py cela ne se connecte pas et settings.py cela fait

Espérons que cela contourne le problème. :)

+0

Je ne pense pas que ça marche. La réponse que vous avez fournie semble être la même avec la réponse dans [link] (http://stackoverflow.com/questions/4774800/mongoengine-connect-in-settings-py-testing-problem), mais nous sommes confrontés à différents problèmes. Je veux aussi utiliser mongodb en test – gogomac