2009-04-06 15 views
3

J'essaye d'écrire une tâche pour Paver qui exécutera nosetests sur mes dossiers.Utilisant paver et le nez avec une structure de répertoire atypique

Ma structure de répertoire ressemble à ceci:

project/ 
    file1.py 
    file2.py 
    file3.py 
    build/ 
     pavement.py 
    subproject/ 
     file4.py 
    test/ 
     file5.py 
     file6.py 

doctests (en utilisant l'option --with_doctest) doit être exécuté sur tous les fichiers * py, alors que seuls les fichiers sous project/test (dans cet exemple, file5.py et file6.py) devrait être recherché pour les routines de test.

Je ne peux pas sembler comprendre comment faire cela - je peux écrire un plugin personnalisé pour nose qui inclut les fichiers corrects, mais je ne peux pas sembler obtenir paver pour construire et installer avant d'appeler la nosetests tâche. Je ne peux pas non plus trouver un moyen d'obtenir paver de passer une liste de fichiers à tester à nosetests sur la ligne de commande.

Quel est le meilleur moyen de le faire fonctionner?

Répondre

2

Est-ce que ceci est du tout proche de ce que vous essayez d'obtenir?

from paver.easy import sh, path 
__path__ = path(__file__).abspath().dirname() 

@task 
def setup_nose_plugin(): 
    # ... do your plugin setup here. 

@task 
@needs('setup_nose_plugin') 
def nosetests(): 
    nose_options = '--with-doctest' # Put your command-line options in there 
    sh('nosetests %s' % nose_options, 
     # Your pavement.py is in a weird place, so you need to specify the working dir: 
     cwd=__path__.parent) 

Je ne suis pas vraiment sûr de savoir comment dire le nez à regarder dans des fichiers spécifiques, mais c'est une question d'options de ligne de commande.

--where vous permet de spécifier un répertoire, mais je ne vois pas un moyen de dire "exécuter seulement doctests ici, et d'autres tests ici". Vous pouvez avoir besoin de deux invocations de sh('nosetests') pour faire tout cela.