2013-10-24 2 views
0

У меня есть абстрактная модель пользователя.Создать модель только для тестирования

Тестирование включает в себя подклассификацию этой абстрактной модели и установку AUTH_USER_MODEL подклассифицированной модели.

Проблема с AUTH_USER_MODEL заключается в том, что она должна иметь форму «app-name.model-name» и, следовательно, она должна быть относится к модели в файле models.py. Но если он находится внутри файла models.py, он будет синхронизирован с производственной базой данных, что не совсем вредно, но было бы неплохо, если бы это было не так.

Я видел Django: How to create a model dynamically just for testing но ответы кажутся хаком

В настоящее время, что я делаю (и ненадежны?):

в [Приложения] /models.py:

# this model only gets created during a test 
if 'test' in sys.argv: 
    class AccountTest(AbstractAccount): 
     pass 

в [ приложения]/тесты/INIT .py:

@override_settings(
    AUTH_USER_MODEL = '[apps].AccountTest', 
) 
class AccountManagerTest(TransactionTestCase): 

У кого-нибудь есть лучший способ? Это довольно хаки. Кроме того, любая проблема с этим подходом?

ответ

1

Хороший подход - использовать отдельный файл настроек для вашей тестовой среды. У вас может быть приложение, указанное только в INSTALLED_APPS этих тестовых настройках, и реализовать там свои тестовые модели. Этот подход также хорош, если, например, вы хотите использовать нос для запуска тестов и т. Д. Затем вы должны запустить свои тесты следующим образом:

python manage.py test --settings=my_project.test_settings 
Смежные вопросы