описание проблемы
Я ищу способ вставить данные в django тестовую базу данных перед запуском django test. Это требование происходит потому, что настройка URL написана так, как показано ниже.
urls.py
group_names = Group.objects.values_list('name', flat=True)
for group in group_names :
url(r'^{}/{}'.format(group,'webindex'), web_index)
Например, если в таблице групп базы данных есть группа 1 и группа 2, URL будет '/ group1 / webindex /' и '/ group2 / webindex / ». Это работает найти в производственной среде. Страница успешно показана. потому что производственная база данных уже завершает групповые данные.
Однако, когда я хочу написать контрольный пример для web_index, возникает проблема. Вот мой код.
tests.py
class webindexTestCase(TransactionTestCase):
fixtures = ['./auth_group.json']
def test_webindex(self):
c = Client()
r = c.get('/group1/webindex/')
print(r.status_code)
при запуске теста код ответа http всегда получает 404. Насколько я знаю, это произошло потому, что при запуске django проверить, что URL-адреса были установлены перед вставкой данных группы в тестовую базу данных.
Поэтому мне интересно, есть ли способ вставить данные в django тестовую базу данных перед установкой шаблона URL-адресов или сбросить шаблон URL-адресов при запуске этого теста ?
Что я пробовал
Вручную вставьте данные группы в тестовую базу данных, затем запустите тест:
Перед запуском python manage.py test вставьте данные группы проверить базу данных. Хотя этот способ работает, код ответа - 200. Однако я ищу способ автоматически сделать это.
Использование setUp()
:
Я попытался изменить настройку () в моем тестовом примере, как показано ниже. Это все еще получает 404 HTTPS передышки. На мой взгляд, настройка django urls выполняется до setUp()
.
class webindexTestCase(TransactionTestCase):
def setUp(self):
Group.objects.create(name='group1')
def test_webindex(self):
c = Client()
r = c.get('/group1/webindex/')
print(r.status_code)