2013-10-19 3 views
3

Python, Django 유닛 테스트. RequestFactory 테스트 나던 작업

from django.test import RequestFactory 
from django.test import TestCase 
from views import change_item 
from models import Product 
from django.utils import unittest 


class TestChange_item(TestCase): 
    def setUp(self): 
     self.factory = RequestFactory() 

    def change_item_test(self): 
     # Create an instance of a GET request. 
     request = self.factory.get('main/views') 
     # Test my_view() as if it were deployed at /customer/details 
     response = change_item(request) 
     self.assertEqual(response.status_code, 200) 

(I 요청을 테스트 할) 나는

def change_item(request): 
    name_change = request.POST.get('name_change') 
    cost_change = request.POST.get('cost_change') 
    category_change = request.POST.get('category_change') 
    product_id = request.POST.get('product_id') 
    category_name = Category.objects.get(name = category_change) 
    product = Product.objects.get(id__exact = product_id) 
    product.name = name_change 
    product.category = category_name 
    product.price = cost_change 
    product.save() 
    return HttpResponse() 

을 테스트 할이보기를하고 난 그것에 대한 테스트를 썼다, 그러나 그것은 작동하지 않습니다 나는 그것을 실행할 때 콘솔에서 이것을 얻는다.

ERROR: change_item_test (src.main.tests.TestChange_item) 
---------------------------------------------------------------------- 
Traceback (most recent call last): 
File "/home/volodia/work/shopping-helper/src/main/tests.py", line 19, in change_item_test 
response = change_item(request) 
File "/usr/local/lib/python2.7/dist-packages/django/contrib/auth/decorators.py", line 24, in _wrapped_view 
if test_func(request.user): 
AttributeError: 'WSGIRequest' object has no attribute 'user' 

---------------------------------------------------------------------- 
Ran 1 test in 0.002s 

FAILED (errors=1) 

나는 무엇을 할 수 있냐? 아니면 요청을 테스트하는 다른 방법이 있습니까?

답변

5

설명서를 보면 manually add a user to the request이 필요하다는 것을 알 수 있습니다. 이 작업은 자동으로 수행되지 않습니다.

def change_item_test(self): 
    request = self.factory.get('main/views') 
    request.user = User.objects.create_user(username="bobalong") 

이와 같은 사용자를 추가하면 로그인 요청을 시뮬레이션합니다. 이것이 원하는 것이 아니라면 AnonymousUser을 대신 생성해야합니다. 일반적으로 오류가 발생하면 알 필요가있는 모든 것을 제공해야합니다. 요청에 user이 없기 때문에 테스트에 실패했다는 것을 명시하고 있습니다. 실제 사용자를 추가하거나 요청에 모의 사용자 객체를 추가하는 것이 답입니다.

또한 POST 요청으로 만 작동하는보기를 테스트하는 것 같습니다. request.POST에 올바른 사전 키가 없으므로 실패 할 것입니다. 다음을 수행하여 POST 요청을 만들 수 있습니다.

factory.post('main/views', {'name_change': 'some name'})` 
관련 문제