Comment tester les commandes personnalisées django-admin
-
18-09-2019 - |
Question
J'ai créé django-admin personnalisé commandes
Mais, je ne sais pas comment tester dans tests standards django
La solution
Si vous utilisez un autre outil de couverture, il serait bon de l'appeler à partir du code avec:
from django.core.management import call_command
from django.test import TestCase
class CommandsTestCase(TestCase):
def test_mycommand(self):
" Test my custom command."
args = []
opts = {}
call_command('mycommand', *args, **opts)
# Some Asserts.
Autres conseils
Vous devez faire votre script de commande réelle minimum possible, de sorte qu'il appelle simplement une fonction ailleurs. La fonction peut alors être testée par des tests unitaires ou doctests normalement.
vous pouvez voir dans github.com exemple voir ici
def test_command_style(self):
out = StringIO()
management.call_command('dance', style='Jive', stdout=out)
self.assertEquals(out.getvalue(),
"I don't feel like dancing Jive.")
Une alternative simple à stdout analyse syntaxique est de rendre votre commande la gestion de sortie avec un code d'erreur si elle ne fonctionne pas correctement, par exemple en utilisant sys.exit (1).
Vous pouvez prendre cela dans un test avec:
with self.assertRaises(SystemExit):
call_command('mycommand')
Je suis d'accord avec Daniel que le script de commande réelle devrait faire le minimum possible, mais vous pouvez également tester directement dans un test unitaire Django en utilisant os.popen4
.
vous pouvez à partir de votre test unitaire une commande comme
fin, fout = os.popen4('python manage.py yourcommand')
result = fout.read()
Vous pouvez ensuite analyser le contenu du résultat pour vérifier si votre commande Django a réussi.