Я пытаюсь написать несколько тестов для приложения Django, над которым я работаю, но я еще не решил точно указать URL-адреса, которые я хочу использовать для каждого представления. Поэтому я использую именованные URL-адреса в тестах.Django тестирование URL-адресов с дополнительными параметрами GET
К примеру, у меня есть URL-адрес с именем приборной панели:
c = Client()
resp = c.get(reverse('dashboard'))
Эта точка зрения должна быть доступна только для зарегистрированных пользователей. Если текущий пользователь анонимен, он должен перенаправить их на страницу входа в систему, которая также является именованным URL. Однако, когда он делает это, он использует дополнительный параметр GET для отслеживания URL он просто пришел, что приводит к следующему:
/login?next=dashboard
Когда я затем попытаться проверить переадресацию, он терпит неудачу из-за эти дополнительные параметры:
# It's expecting '/login' but gets '/login?next=dashboard'
self.assertRedirects(resp, reverse('login'))
Очевидно, что это работает, если я жестко закодировать их в тест:
self.assertRedirects(resp, '/login?next=dashboard')
Но тогда, если я когда-нибудь решите изменить URL для моего зрения приборной панели , Я должен будет обновить каждый тест, который его использует.
Есть ли что-то, что я могу сделать, чтобы упростить обработку этих дополнительных параметров?
Любые советы, оцененные.
Спасибо.
Почти было, но вы пропустили всю точку вопроса в ФП в. Он не беспокоится о части «входа» URL-адреса, но параметр 'next' GET. URL-адрес «приборной панели» может измениться в будущем, поэтому OP не хочет жестко кодировать его в тестах. @Dan: вы можете в принципе придерживаться того же подхода здесь, но замените «приборную панель» на «% s» и передайте 'reverse ('dashboard')' для параметра string. –
Проблема в том, что параметры GET не могут быть записаны в urls.py напрямую, поэтому @Dan вы можете использовать LOGIN_REDIRECT_URL = '/ dashboard /' в settings.py для перенаправления нужного URL-адреса после входа в систему. И если вы используете login_required decorator для функции views, анонимный будет перенаправлен на этот URL. – greg
Вам не нужно ничего делать в urls.py. Параметр 'next' буквально означает« перейти к следующему URL-адресу после ». Ему просто нужно утверждать, что URL-адрес включает в себя «? Next =% s»% reverse ('dashboard') '. Затем, независимо от того, какой URL-адрес «панель управления» разрешает, он будет соответствовать. –