2015-11-12 2 views
0

Я пытаюсь внедрить систему пользовательских профилей в Django, которая позволяет просто запросить «/ profile /», поскольку URL-адрес перенаправляется на ваш профиль пользователя, если он зарегистрирован, и на страницу входа в систему, если нет.Тестирование Логин Переадресация

Тест записывается следующим образом

class LoggedInProfileTest(TestCase): 
    def setUp(self): 
     self.factory = RequestFactory() 
     self.user = User.objects.create_user(
      username='Milhouse', 
      email="[email protected]", 
      password="MilhousePW") 

    def tearDown(self): 
     self.user.delete() 

    def test_user_profile_redirect(self): 
     request = self.factory.get("/profile/") 
     request.user = self.user 
     response = profile_redirect(request) 
     self.assertRedirects(
      response, 
      expected_url="/profile/Milhouse/") 

фактически функции должным образом и перенаправляет по желанию, но тест отказывается проходить со следующей ошибкой брошенной.

AttributeError: 'HttpResponseRedirect' object has no attribute 'client' 

URL маршрутизации код

# main urls.py 
urlpatterns = [ 
    ... 
    url(r'^profile/', include('profiles.urls')), 
    ... 
] 

# profiles.py 
urlpatterns = [ 
    url(r'^(?P<username>[\[email protected]]+)/$', 
     views.user_profile, 
     name="user_profile"), 
    url(r'^$', 
     views.profile_redirect, 
     name="profile_redirect") 
] 

код Просмотров

@login_required 
def profile_redirect(request): 
    return redirect("user_profile", request.user.username) 


def user_profile(request, username): 
    pass 

Вся помощь ценится :)

+0

Не использовали unittest через некоторое время (поклонник py.test), но разве вы не должны использовать TestClient, предоставленный TestCase? Вы должны иметь доступ к нему как 'self.client' из любого метода в вашем тестовом классе. Не уверен, что это может помочь с вашей проблемой. – Sebastian

+0

Спасибо за понимание Себастьяна. На самом деле я должен был :). Я хотел пообщаться с RequestFactory, чтобы познакомиться с ним, но, возможно, это немного перебор для этих тестов. – guptam

ответ

0

Вы должны были использовать client предоставленную TestCase.

Сначала вам нужно создать пользователя для тестирования в базе данных. Вы должны сделать это явно в тестовом коде.

Предположим, что пользователь, которого вы хотите войти в тестовый пример, имеет имя пользователя username и пароль password. Затем вы можете сделать следующее:

self.client.login(username=username, password=password) # This do the login work 
response = self.client.get('/profile') 
# here do your assert work 

Надеюсь, что это поможет.

+0

Sunhs вы ударили его по голове! По-видимому, RequestFactory не играет хорошо с сеансами, которые делают число при любом тестировании входа в систему. Спасибо за помощь sunhs и @Sebastian :) – guptam