web-dev-qa-db-fra.com

Comment puis-je exécuter un seul test avec Nose in Pylons

J'ai une application Pylons 1.0 avec un tas de tests dans le répertoire test/fonctionnel ..__ Je reçois des résultats de test étranges et je veux juste lancer un seul test. La documentation sur le nez indique que je devrais être capable de passer un nom de test sur la ligne de commande, mais j'obtiens ImportErrors peu importe ce que je fais.

Par exemple:

nosetests -x -s sometestname

Donne:

Traceback (most recent call last):
  File "/home/ben/.virtualenvs/tsq/lib/python2.6/site-packages/nose-0.11.4-py2.6.Egg/nose/loader.py", line 371, in loadTestsFromName
   module = resolve_name(addr.module)
  File "/home/ben/.virtualenvs/tsq/lib/python2.6/site-packages/nose-0.11.4-py2.6.Egg/nose/util.py", line 334, in resolve_name
   module = __import__('.'.join(parts_copy))
ImportError: No module named sometestname

Je reçois la même erreur pour

nosetests -x -s appname.tests.functional.testcontroller

Quelle est la syntaxe correcte?

141
Ben

nosetests appname.tests.functional.test_controller devrait fonctionner, où le fichier est nommé test_controller.py.

Pour exécuter une classe et une méthode de test spécifiques, utilisez un chemin d'accès de la forme module.path:ClassNameInFile.method_name, c'est-à-dire avec deux points séparant le chemin du module/fichier et les objets du fichier. module.path est le chemin relatif du fichier (par exemple tests/my_tests.py:ClassNameInFile.method_name).

222
Antoine Leclair

Pour moi, avec Nosetests 1.3.0, ces variantes fonctionnent (mais assurez-vous que vous avez __init__.py dans votre dossier tests):

nosetests [options] tests.ui_tests
nosetests [options] tests/ui_tests.py
nosetests [options] tests.ui_tests:TestUI.test_admin_page

Notez que deux points entre le nom du module et le nom de la classe.

45
Kee

Je dois ajouter l'extension de fichier ".py", c'est-à-dire 

r'/path_to/my_file.py:' +  r'test_func_xy'

C'est peut-être parce que je n'ai aucune classe dans le fichier. Sans le .py, le nez se plaignait: 

Impossible de trouver callable test_func_xy dans le fichier/path_to/my_file: le fichier n'est pas un module python

Et ceci bien que j'ai un __init__.py dans le dossier /path_to/.

2
stackoverflowwww

Ce qui suit a bien fonctionné pour moi:

nosetests test_file.py:method_name

Notez que mes tests n'étaient pas dans une classe. Les méthodes de test étaient dans un seul fichier.

0
Raptor

J'ai écrit ce petit script, basé sur les réponses précédentes:

#!/usr/bin/env bash

# 
# Usage:
# 
#     ./noseTest <filename> <method_name>
# 
# e.g.:
# 
#     ./noseTest test/MainTest.py mergeAll
#     
# It is assumed that the file and the test class have the _same name_ 
# (e.g. the test class `MainTest` is defined in the file `MainTest.py`).
# If you don't follow this convention, this script won't work for you.
#

testFile="$1"
testMethod="$2"

testClass="$(basename "$testFile" .py)"

nosetests "$testFile:$testClass.test_$testMethod"
0
tfga