2014-04-17 1 views
0

장고 테스트 클라이언트 (django.test.Client)를 사용하여보기 테스트를 실행하고 있습니다. 게시 요청을 처리하는 색인 ​​기능에서 Test Client를 사용하려고 시도하면 인증이 성공적으로 수행 되더라도 계속해서 테스트가 실패합니다. Heres는Django 테스트 : SESSION_KEY 실패 assertIn

내 테스트 :

가 request.user.is_authenticated 경우에만 (액세스 할 수있는 다른보기에서 response.content 수익률의 HTML 데이터)입니다
def test_login(self): 
    response = self.client.post('/login/', {'username':'user', 'password':'pass'}) 

    print response.content 

    self.assertIn(SESSION_KEY, self.client.session) 

그래서 내가 로그인 프로세스가 성공적으로 작동 알고있는 이유가 있기 때문에 참된. 즉, "로그인 한 페이지"를 생성하기 위해 response.content에 로그인해야합니다. 그래서이 함수는 분명히 사용자를 로깅하는 실제적인 목적으로 작동한다고 말할 수 있습니다. 그러나 클라이언트 세션에서 SESSION_KEY에 액세스 할 수없는 이유를 파악하기 위해 오랫동안 문서를 수색했습니다. 모든 독서는 장고 테스트 클라이언트가 사실 자연 상태이며 세션을 저장해야한다고 제안합니다.

누군가가이 문제에 대해 밝힐 수 있습니까?

답변

0

이 좋아 많은 검색 및 # 장고에 주위에 물어 후에, 나는 test_login_view 기능에서 사용자 로그인을 처리하는 내 응용 프로그램에서보기를 평가 한 것

from django.contrib.auth import SESSION_KEY, get_user_model 
from django.test import Client 

def setUp(self): 
    self.client = Client() 

def test_login_view(self): 

    user_pk = get_user_model()._default_manager.get(username__exact='test_username_here').pk 

    response = self.client.post('/login/', {'username':'test_username_here', 'password':'test_password_here'}) 

    self.assertEqual(self.client.session[SESSION_KEY], user_pk) 

장고 1.6.x 이상인 작업 솔루션을 만든 템플릿 폼. 첫째, 나는 user_pk 데이터베이스에서 주어진 사용자의 실제 기본 키입니다 잡아. user.objects.get() 대신 get_user_model()을 사용했기 때문에 User 모델이 수정되었는지 여부에 관계없이 참조 할 수 있습니다. 물론 후자도 사용할 수 있습니다. 둘째, 표준 사용자의 브라우저처럼 테스트 클라이언트를 사용하여 게시물 요청을 보냅니다. 마지막으로, self.client.session [SESSION_KEY]에 로그인 한 사용자의 기본 키가 있다는 것을 발견했습니다. (로그인이 성공하면 그렇지 않으면 단순히 KeyError가 발생합니다)