2016-10-04 10 views
0

장고에 대한 첫 번째 테스트를 수행하려고하는데 잘 모르겠거나 문서를 읽은 후에 (매우 쉬운 테스트를 설명하는 곳에서) 난 아직도 어떻게 해야할지 모르겠다. .Django에서 테스트하는 방법

"로그인"url로 이동하여 로그인을 시도하고 성공한 로그인이 인증 된 페이지로 리디렉션 된 후 시도하고 있습니다.

from unittest import TestCase 

from django.test.client import Client 


class Test(TestCase): 
    def testLogin(self): 
     client = Client() 
     headers = {'X-OpenAM-Username': 'user', 'X-OpenAM-Password': 'password', 'Content-Type': 'application/json'} 
     data = {} 
     response = client.post('/login/', headers=headers, data=data, secure=False) 
     assert(response.status_code == 200) 

그리고 테스트 성공, 그러나 "//로그인"로드의 200 beacuse 나 테스트가 로그인을하고 있기 때문에 리디렉션 후 200 코드를 얻을 수 있을지 모르겠어요.

URL을 리디렉션 한 후 로그인이 올바른지 테스트에서 어떻게 확인할 수 있습니까? 테스트에 도움이되는 플러그인이나 무언가가 있습니까? 아니면 내 견해와 모델을 테스트하기위한 좋은 자습서를 찾을 수 있습니까?

감사합니다.

+0

[Django Doct 테스트] (https://docs.djangoproject.com/en/1.10/topics/testing/)를 따르지 않는 이유는 무엇입니까? –

+0

설명서의 튜토리얼을 따르려고했지만 오류가 발생합니다. – Aker666

답변

1

If you set follow to True the client will follow any redirects and a redirect_chain attribute will be set in the response object containing tuples of the intermediate urls and status codes.

그런 다음 코드를 django.test 가져 오기가 self.assertRedirects보다는하다는

class Test(TestCase): 
    def test_login(self): 
     client = Client() 
     headers = {'X-OpenAM-Username': 'user', 'X-OpenAM-Password': 'password', 'Content-Type': 'application/json'} 
     data = {} 
     response = client.post('/login/', headers=headers, data=data, secure=False) 
     self.assertRedirects(response,'/destination/',302,200) 

참고 테스트 케이스에서

만큼 간단하다 follow 매개 변수를 사용하여 assert 또는 assertRedirects

양식 데이터로 빈 사전을 게시하기 때문에 위의 테스트가 실패 할 가능성이 높습니다. Django 폼 뷰는 폼이 유효하지 않을 때 리다이렉트하지 않으며 빈 폼은 아마도 여기에서 유효하지 않을 것입니다.

+0

아, 감사합니다. 나는 지금 일하고있어, 나는 나중에 시험해 볼 것이다! 나는 장고로 로그인하지 않고 데이터를 {{}로 보낸다. 나는 IDP (OpenAM)에 로그인을 위임하고 코드에서도 동일한 형식과 작동을 사용하므로 테스트에서도 작동해야한다./ – Aker666

+0

예, 이 경우 작동해야합니다 – e4c5

+0

작품, 한 번만 더 질문. "AssertionError : 응답이 예상대로 리디렉션되지 않았습니다. 응답 코드가 200 (예상 302)"코드에서 "return HttpResponseRedirect ('/ loggedin')"을 사용합니다. 그렇지? – Aker666

1

장고에는 테스트를위한 많은 도구가 있습니다. 이 작업을 수행하려면 Django의 테스트 케이스 클래스 (예 : django.test.TestCase)를 사용해야합니다. 그런 다음 방법 assertRedirects()을 사용할 수 있으며 리디렉션 된 위치와 코드를 확인합니다. here이 필요한 정보를 찾을 수 있습니다. 나는 당신의 작업에 대한 코드를 작성하기 위해 시도했다 :

from django.test import TestCase 

class Test(TestCase): 
    def test_login(self): 
     data = {'X-OpenAM-Username': 'user', 'X-OpenAM-Password': 'password'} 
     response = client.post('/login/', data=data, content_type='application/json', secure=false) 
     assertRedirects(response, '/expected_url/', 200) 

은 그럼 당신은 모든 테스트를 실행하는 python3 manage.py test를 사용할 수 있습니다. 재전송을 제대로 테스트하려면

+0

안녕하세요,이 질문을하기 전에이 작업을 시도했지만 "assertRedirects url = response.url AttributeError : 'HttpResponse'개체에 항상 'url'속성이 없습니다. – Aker666

관련 문제