测试API使用Django Rest Framework和TokenAuthentication返回模拟数据的密钥

时间:2017-05-16 15:29:39

标签: django rest django-rest-framework

我正在使用Django Rest Framework构建REST-ful API。我之前已经处理过与REST API的集成,并且已经获得了专门用于测试集成的测试API密钥,允许您发送数据并返回模拟数据的密钥,但是没有将数据放入系统中。我正在尝试在我的API中实现相同的功能,但我还没有找到办法这样做。

2 个答案:

答案 0 :(得分:0)

首先,您可以安装mommy以在测试中创建模拟数据。 因此,在tests.py中,您可以为API创建测试,检查status_code和响应:

def test(self):
   user = mommy.make(User) # Create a fake user
   token = Token.objects.get(user__username=user.username) # Generate a token
   self.client.credentials(HTTP_AUTHORIZATION='Token ' + token.key) # Token for your request
   response = self.client.post("url", your_data) # POST in your URL
   self.assertEqual(response.status_code, status.HTTP_201_CREATED) # Status Code of Creation
   self.assertEqual(User.objects.last().first_name, user.first_name) # Check the fields created

然后运行运行python manage.py test的测试或按照DRF

中的文档进行操作

答案 1 :(得分:0)

你可以使用一些装饰器来做到这一点:)

from django.contrib.auth import authenticate
def mock_funcname(func):

    def wrapper(request, *args, **kwargs):
        user = authenticate(token=request.REQUEST['token'])
        if user.id == 'TEST USER ID':
            return Response({'detail': "Some stuff mocked for this user :)"})
        return func(request, *args, **kwargs)

    return wrapper

所以现在你可以把它像其他装饰一样:

@api_view(['POST'])
@permission_classes((IsAuthenticated,))
@mock_funcname
def funcname(request, pid=None):
    return response......

它需要使它更复杂的基本功能