2013-09-02 2 views
3

나는 내 고향에 대한 기본 테스트를 실행하고 있습니다. 쉘에서 클라이언트를 로깅하는 동안 테스트 스위트를 사용할 때 동일한 코드 행이 클라이언트를 로깅하지 못합니다.Django Unittests 클라이언트 로그인 : 테스트 스위트에서는 실패하지만 쉘에서는 그렇지 않습니다.

장고 테스트 스위트를 사용할 때 클라이언트를 기록하는 올바른 방법은 무엇입니까?

또는

클라이언트 내 현재의 방법으로 로그인되지 않는 이유 어떤 생각?

쉘 시험 :

import unittest 
from django.test.client import Client 
from django.test.utils import setup_test_environment 
setup_test_environment() 

client = Client() 
login = client.login(username='agconti', password='password') 

# login --> evals to True 

장고 테스트 스위트 :

#### View Tests #### 
import unittest 
from django.test.client import Client 
from shopping_cart.models import Store, Order, Item, Transaction 

class Home_ViewTest(unittest.TestCase): 
    def setUp(self): 
     self.client = Client() 
     # login user 
     login = self.client.login(username='agconti', password='password') 
     # Check login 
     self.assertEqual(login, True) 

    def test_details(self): 
     # get the home view 
     response = self.client.get('/')  
     self.assertEqual(response.status_code, 200) 

     # Check that the rendered context is not none 
     self.assertTrue(response.context['stores'] != None) 

# self.assertEqual(login, True) --> login evals to False, raises the assertion 

답변

22

은 테스트 사용자를 만들어야합니다. 같은 뭔가 : 귀하의 유닛 테스트에서 사용자가되지 않을 수도있는 반면 사용자를 테스트 쉘에서

def setUp(self): 
    self.client = Client() 
    self.username = 'agconti' 
    self.email = '[email protected]' 
    self.password = 'test'   
    self.test_user = User.objects.create_user(self.username, self.email, self.password) 
    login = self.client.login(username=self.username, password=self.password) 
    self.assertEqual(login, True) 

은 이미 아마 당신의 DB에 존재 ...

+0

걸렸으, 감사합니다. 이것은 잘 작동합니다. 다른 사람에게는'django.contrib.auth.models from import User'를 사용하여 사용자를 가져와야합니다. – agconti

+0

'test.py'파일 당 한 번 사용해야합니까? 내 자신의'create_test_user' 테스트에서 아마도? 여러 테스트를 실행하면 사용자 ID가 고유하지 않다는 오류가 발생합니다. – agconti

+0

@agconti 중복 된 사용자 문제도 발생했습니다. 그걸 해결할 수 있었 니? – Roger

관련 문제