Comment tester les commandes django-admin personnalisées
J'ai créé Commandes django-admin personnalisées
Mais, je ne sais pas comment le tester dans tests django standard
5 réponses
Si vous utilisez un 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.
Vous devriez rendre votre script de commande réel le minimum possible, de sorte qu'il appelle simplement une fonction ailleurs. La fonction peut ensuite être testée via des tests unitaires ou des doctests comme d'habitude.
Je suis d'accord avec Daniel que le script de commande réel devrait faire le minimum possible mais vous pouvez également le tester directement dans un test unitaire Django en utilisant os.popen4
.
À partir de votre test unitaire, vous pouvez avoir une commande comme
fin, fout = os.popen4('python manage.py yourcommand')
result = fout.read()
Vous pouvez ensuite analyser le contenu de result pour tester si votre commande Django a réussi.
Une alternative simple à parsing stdout consiste à faire quitter votre commande de gestion avec un code d'erreur si elle ne fonctionne pas correctement, par exemple en utilisant sys.la sortie(1).
Vous pouvez l'attraper dans un test avec:
with self.assertRaises(SystemExit):
call_command('mycommand')