2012-03-27 3 views
2

일부 외부 서비스가 있습니다. 내 장고 앱은 외부 서비스 API 위에 구축됩니다. 내 외부 서비스와 이야기하기 위해, 나는 인증 쿠키를 전달해야만한다. 쿠키는 User (그 쿠키! = django 쿠키)을 읽음으로써 얻을 수있다.Djano 테스트에서 사용자를 얻으려면 어떻게해야합니까?

, requests과 같은 테스트 도구를 사용하여 테스트를 작성하는 데 어려움이 있습니다.

class MyTestCase(WebTest): 
    def test_my_view(self): 
     #client = Client() 
     #response = client.get(reverse('create')).form 
     form = self.app.get(reverse('create'), user='dummy').form 
     print form.fields.values() 
     form['name'] = 'omghell0' 
     print form 

     response = form.submit() 

내 외부 서비스에 사용자를 만드는 양식을 제출해야합니다. 하지만 그렇게하기 위해 나는 보통 외부 서비스에 대한 나의 특권을 인증하기 위해 request.user을 전달할 것입니다. 하지만 request.user이 없습니다.

이러한 종류의 물건에는 어떤 옵션이 있습니까?

감사합니다 ...


는 가정이 내가

Traceback (most recent call last): 
    File "/var/lib/graphyte-webclient/webclient/apps/codebundles/tests.py", line 10, in setUp 
    self.usr = User.objects.get(username='dummy') 
    File "/var/lib/graphyte-webclient/graphyte-webenv/lib/python2.6/site-packages/django/db/models/manager.py", line 132, in get 
    return self.get_query_set().get(*args, **kwargs) 
    File "/var/lib/graphyte-webclient/graphyte-webenv/lib/python2.6/site-packages/django/db/models/query.py", line 341, in get 
    % self.model._meta.object_name) 
DoesNotExist: User matching query does not exist 

얻을

import unittest 
from django.test.client import Client 
from django.core.urlresolvers import reverse 
from django_webtest import WebTest 
from django.contrib.auth.models import User 


class SimpleTest(unittest.TestCase): 
    def setUp(self): 
     self.usr = User.objects.get(username='dummy') 
     print self.usr 
    ....... 

내 tests.py입니다하지만 뷰의 User.objects을 테스트하는 경우, 나는 괜찮아입니다 .

답변

4

당신은 테스트를 위해 테스트 사용자를 생성하기 위해 setUp() 메소드를 사용했습니다. 테스트에서는 실제 데이터를 사용하지 않지만 유닛 테스트를 실행하기위한 임시 테스트 데이터베이스를 만듭니다. 자세한 내용은이 읽기 : https://docs.djangoproject.com/en/dev/topics/testing/?from=olddocs#writing-unit-tests

편집 : 여기

은 예입니다 : 서로 다른 기능을 테스트하기 위해 하나 이상의 방법을 사용하려는 경우

from django.utils import unittest 
from django.contrib.auth.models import User 

from myapp.models import ThisModel, ThatModel 

class ModelTest(unittest.TestCase): 
    def setUp(self): 
     # Create some users 
     self.user_1 = User.objects.create_user('Chevy Chase', '[email protected]', 'chevyspassword') 
     self.user_2 = User.objects.create_user('Jim Carrey', '[email protected]', 'jimspassword') 
     self.user_3 = User.objects.create_user('Dennis Leary', '[email protected]', 'denisspassword') 

은 또한 점에 유의, 당신은 사용해야합니다 tearDown 메서드는 다음 테스트를 위해 객체를 다시 인스턴스화하기 전에 객체를 파괴합니다. 이것은 마침내 알아낼 시간이 좀 걸리는 것이므로 문제를 해결해 줄 것입니다.

def tearDown(self): 
     # Clean up after each test 
     self.user_1.delete() 
     self.user_2.delete() 
     self.user_3.delete() 
+2

todd는 djangos 인증 시스템을 사용하는보기가 있으면 테스트 클라이언트를 사용하여 사용자를 로그인 할 수 있습니다. https://docs.djangoproject.com/en/dev/topics/testing/?from=olddocs#django.test.client.Client.login – dm03514

+0

@Todd B thanks. 그것은 매우 도움이되었다! dm03514와 동일합니다. – User007

1

장고는 here과 같이 단위 테스트 또는 문서 테스트를 사용할 것을 권장합니다. 이 테스트는 각 apps 디렉토리의 tests.py에 넣을 수 있으며,`python manage.py test '명령을 사용할 때 실행될 것입니다. 에 설명 된대로 Django는 단위 테스트를 위해 매우 유용한 클래스와 함수를 제공합니다. 특히, 클래스 django.test.Client이 매우 편리합니다, 당신은 사용자가 같은 것들을 제어 할 수 있습니다.

+0

감사합니다. 나는 여기서 계속해야한다고 생각해? 나는이'User.objects.get (username = 'dummy')'를 내 견해에서'더미 '로 돌려 줄 것이라고 테스트했다. 하지만 테스트에 넣으면 'DoesNotExist : 사용자 일치 쿼리가 존재하지 않습니다.'라는 오류 메시지가 나타납니다. 왜 그렇습니까? – User007

+1

유닛 테스트에서 데이터베이스는 완전히 비어 있음 (즉, 동작이 예측 가능하므로 실제 데이터베이스에는 영향을주지 않음). 픽스처 (fixtures)를 살펴보십시오. SQL을 덤프 할 수 있습니다.json 파일을 검사하고 테스트하기 전에 데이터베이스에 테스트로드가 있습니다. –