Django тестирует именованные URL с дополнительными параметрами GET - PullRequest
7 голосов
/ 23 февраля 2012

Я пытаюсь написать несколько тестов для приложения Django, над которым я работаю, но я еще не определился с точными URL-адресами, которые я хочу использовать для каждого представления.Поэтому я использую именованные URL в тестах.

Например, у меня есть URL с именем dashboard:

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 для моегоВ представлении панели мониторинга мне придется обновлять каждый тест, в котором он используется.

Есть ли что-то, что я могу сделать, чтобы упростить обработку этих дополнительных параметров?

Любой совет приветствуется.

Спасибо.

1 Ответ

5 голосов
/ 23 февраля 2012

Как видите, reverse (...) возвращает строку, которую вы можете использовать как:

self.assertRedirects(resp, '%s?next=dashboard' % reverse('login'))
...