2 votes

Modules Web2py et Doctests

J'ai un module applications/webapp/modules/a.py qui contient un local_import pour importer applications/webapp/modules/b.py. Je veux tester a.py et b.py avec doctest. Le shell web2py avec l'option "-T" fonctionne partiellement mais signale l'erreur ci-dessous après avoir dit "Recherche de tests dans a.py: class".

Je comprends que cela est dû au fait que l'option "-T" est destinée uniquement aux tests des contrôleurs. Mais en raison du local_import dans a.py, il n'y a pas de moyen facile de tester a.py en dehors de l'environnement web2py. Alors comment devrais-je refactoriser les modules pour pouvoir les tester avec doctest?

Traceback (most recent call last):
File "web2py.py", line 19, in gluon.widget.start(cron=True) File "/home/.../web2py/gluon/widget.py", line 796, in start test(options.test, verbose=options.verbose) File "/home/.../web2py/gluon/shell.py", line 326, in test doctest_object(name, obj) File "/home/.../web2py/gluon/shell.py", line 322, in doctest_object doctest_object(attr_name, o) File "/home/.../web2py/gluon/shell.py", line 321, in doctest_object o = eval('%s.%s' % (name, attr_name), globs) File "", line 1, in NameError: name 'class' n'est pas défini

0voto

phaedrus Points 8060

Sur la base de ceci, j'ai fait une tentative comme suit. Cela fonctionne bien pour l'instant mais je ne suis pas sûr que ce soit la meilleure approche. Dans le dossier private/, créez un fichier tests.py avec :

from gluon.shell import env
globals().update(env('webapp', import_models=True))

a = local_import('a')

import doctest
doctest.testmod(a, verbose=True)

De plus, dans le fichier a.py j'ai utilisé 'import b' au lieu de 'local_import(b)' comme indiqué dans ceci.

Exécutez les tests en utilisant :

python web2py.py -S webapp --run applications/webapp/private/tests.py

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X