2009-08-27 12 views
1

J'ai une application Pylons en stock créée en utilisant paster create -t pylons avec un contrôleur et un test fonctionnel apparié, ajouté en utilisant paster controller, et une table SQLAlchemy et une classe ORM mappée. La substance SQLAlchemy est définie dans la fonction init_model() plutôt que dans la portée du module (et doit être présente). L'exécution python setup.py test déclenche une exception car nose provoque d'une manière ou d'une autre l'appel de init_model() deux fois dans le même processus, il essaie donc de créer un modèle qui existe déjà.tests de nez de l'application Pylons avec des modèles dans init_model?

Je peux résoudre ce problème en définissant et en vérifiant une variable globale dans init_model(), mais (a) je préfère ne pas, et (b) les bibliothèques tierces telles que AuthKit qui définissent dynamiquement les modèles rompent également les tests, et ne peut pas être si facilement changé.

Est-il possible de fixer nose tests pour Pylônes, ou devrais-je écrire mon propre script de test et il suffit d'utiliser unittest, loadapp et webtest directement? Des exemples de travail de cela?

Répondre

3

Je voudrais essayer de déboguer votre course nosetest. Pourquoi ne pas mettre:

import pdb;pdb.set_trace() 

dans la fonction init_model() et voir comment il est invoqué se plus d'une fois.

Avec APB en cours d'exécution, vous pouvez voir la trace de la pile en utilisant la commande where:

w(here) 
Print a stack trace, with the most recent frame at the bottom. 
An arrow indicates the "current frame", which determines the 
context of most commands. 'bt' is an alias for this command. 
+0

Utilisation pdb a montré que les tests de stock/__ init__.py fournies par Paster a d'abord été en cours d'exécution de la commande application de configuration, puis en fait en cours d'exécution les tests, et cela représente init_model étant appelé deux fois. J'ai commenté la ligne d'installation-application, et tout fonctionne bien. Je suppose que la question restante est de savoir pourquoi Pascal met cela là quand cela ne semble pas nécessaire et ne fonctionne pas out-of-the-box. –

+0

jasonjs: ma compréhension/supposition est que \ _ \ _ init \ _ \ _. Py essaye de créer les tables de base de données pour vous afin que vous n'ayez pas besoin d'exécuter le fichier test-setup test.ini manuellement avant de pouvoir exécuter les tests . –