2014-03-05 1 views
1

로그인이 필요한 페이지를 테스트하는 방법과 관련하여 매우 혼란 스럽습니다. 나는 나의 응답에 200 대신에 302를 얻는다. 그리고 pdb의 응답을 조사 할 때 나는 확실히 로그인 페이지로 방향을 바꾼다. 관련성이있는 경우 데코레이터 대신 로그인 미들웨어를 사용하고 있습니다.Django는 사용자가 로그인해도 로그인 리디렉션 302를 테스트합니다.

class SimplePageLoadsTestCase(TestCase): 

    def setUp(self): 
     self.client = Client() 
     self.user = User.objects.create_user('test_user') 
     self.client.login(username='test_user', password='test_user') 

    def test_login(self): 
     self.assertTrue(self.user.is_authenticated()) 

    def test_index(self): 
     self.client.login(username='test_user', password='test_user') 
     response = self.client.get(reverse('index')) 
     self.assertEqual(response.status_code, 200) 

test_login 테스트 합격. 나는 내가 다시 test_login에 필요하지 않았기 때문에 테스트 당 사용자를 다시 로그인 할 필요가 있는지 확신 할 수 없었지만, 같은 결과로 두 가지 방법으로 시도했다. 내보기에 문은, 그들은 출력을하지 않는, 그래서 내가 의심처럼 내가 전혀 볼을 치는 않을거야 알고있다. 그들이 관련 있다면 내가보기 또는 미들웨어를 제공 할 수

.

편집을 : 미들웨어를 비활성화하고 @login_required 데코레이터로 바꾸고 같은 문제가 발생했습니다.

EDIT AGAIN : 확인하기 만하면 모든 로그인 검사를 꺼내서 모든 것이 작동했습니다 (예상 한대로) self.client가하지 못하는 것이 거의 긍정적입니다. 내가 로그인했는지 알 수 있습니다.

답변

2

암호가 사용자가 creating 인 것처럼 보입니다. 암호를 제공하지 않으면 사용자가 cannot be logged in으로 간주됩니다. 암호를 create_user에 제공하면 수정해야합니다.

self.client = Client() 
self.user = User.objects.create_user('test_user', password='test_user') 
self.client.login(username='test_user', password='test_user') 
+0

시도해 보 겠지만 test_login 기능이 작동하는 이유는 무엇입니까? – thumbtackthief

+1

docs는 is_authenticated가 항상 True를 반환한다고 제안합니다. https://docs.djangoproject.com/en/dev/ref/contrib/auth/#django.contrib.auth.models.User.is_authenticated – dm03514

+1

FREAKIN 'KIDDING ME?! 하루 종일 나는 그걸 보았고, 그렇게 간단했습니다. 고맙습니다! – thumbtackthief

관련 문제