Como testar comandos personalizados de django-admin
-
18-09-2019 - |
Pergunta
eu criei comandos personalizados de django-admin
Mas, eu não sei como testá -lo em Testes padrão de Django
Solução
Se você estiver usando alguma ferramenta de cobertura, seria bom chamá -lo do código com:
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.
Outras dicas
Você deve tornar o seu script de comando real o mínimo possível, para que ele apenas chama uma função em outro lugar. A função pode ser testada por meio de testes de unidade ou médicos normalmente.
você pode ver no exemplo github.comVeja aqui
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.")
Uma alternativa simples a Analisando o stdout é fazer com que seu comando de gerenciamento sai com um código de erro se ele não funcionar com sucesso, por exemplo, usando sys.exit (1).
Você pode fazer isso em um teste com:
with self.assertRaises(SystemExit):
call_command('mycommand')
Concordo com Daniel que o script de comando real deve fazer o mínimo possível, mas você também pode testá -lo diretamente em um teste de unidade Django usando os.popen4
.
De dentro do seu teste de unidade, você pode ter um comando como
fin, fout = os.popen4('python manage.py yourcommand')
result = fout.read()
Você pode analisar o conteúdo do resultado para testar se o seu comando django foi bem -sucedido.