Я хочу написать модульный тест для команды Django manage.py, которая выполняет внутреннюю операцию над таблицей базы данных. Как бы я вызвал команду управления прямо из кода?
Я не хочу выполнять команду в оболочке операционной системы из tests.py, потому что не могу использовать тестовую среду, настроенную с использованием теста manage.py (тестовая база данных, тестовая фиктивная электронная почта и т. Д.)
источник
call_command('check')
, чтобы убедиться, что системные проверки проходят, в тесте.Вместо того, чтобы делать трюк call_command, вы можете запустить вашу задачу, выполнив:
источник
call_command
нужно загрузить проверенное приложениеINSTALLED_APPS
. Между тем, чтобы загрузить приложение только для тестирования и использовать его, я выбрал это.call_command
вероятно, это то, что большинство людей должны попробовать в первую очередь. Этот ответ помог мне обойти проблему, когда мне нужно было передать имена таблиц Unicode вinspectdb
команду. python / bash интерпретировал аргументы командной строки как ascii, и это былоget_table_description
вызовом глубоко в django.следующий код:
... равнозначно следующим командам, набранным в терминале:
Смотрите команды управления из документации django .
источник
В документации по Django для call_command не упоминается, что она
out
должна быть перенаправленаsys.stdout
. Код примера должен выглядеть так:источник
Опираясь на ответ Нейта, у меня есть это:
Использование:
Преимущество здесь в том, что если вы использовали дополнительные опции и OptParse, это поможет вам. Он не совсем совершенен - и пока не передает результаты - но будет использовать тестовую базу данных. Затем вы можете проверить эффекты базы данных.
Я уверен, что использование макетного модуля Micheal Foords, а также переподключение стандартного вывода на время теста означало бы, что вы также можете получить больше от этой техники - проверить выход, условия выхода и т. Д.
источник