为什么我不能测试Django REST框架AuthToken?

时间:2016-05-09 17:08:31

标签: python django unit-testing django-rest-framework

我试图用APITestCase测试Django REST框架AuthToken,但我总是得到状态代码400和消息:

  

b' {" non_field_errors":["无法使用提供的凭据登录。"]}'

奇怪的是,当我通过python manage.py shell输入完全相同的命令时,我得到状态码200和身份验证令牌。

我在这里缺少什么?

这是我的代码:

from rest_framework.test import APITestCase
from rest_framework.authtoken.models import Token
from rest_framework.test import APIClient

class TestAuthToken(APITestCase):
    def test_login_admin(self):
        client = APIClient()
        response = client.post('/api-token-auth/', {'username':'admin','password':'password123'})
        self.assertEqual(response.status_code, 200)

更新 忘了为测试数据库创建用户......这里是新代码:

from django.contrib.auth.models import User
from rest_framework.test import APITestCase
from rest_framework.authtoken.models import Token
from rest_framework.test import APIClient

class TestAuthToken(APITestCase):
    def setUp(self):
        self.admin = User.objects.create_user('admin', 'admin@test.com', 'password123')
        self.admin.save()
        self.admin.is_staff = True
        self.admin.save()

    def test_login_admin(self):
        client = APIClient()
        response = client.post('/api-token-auth/', {'username':'admin','password':'password123'})
        self.assertEqual(response.status_code, 200)

2 个答案:

答案 0 :(得分:1)

您之前是否在测试用例的setUp中创建了用户?  因为django在运行测试时会创建一个测试数据库,并且在测试中为每个类获取为空(除非您指示您希望数据保存在测试之间的数据库中),并且如果您的代码检查数据库以查看是否凭证没问题,它会发现任何拥有该用户名和密码的用户都不存在。

答案 1 :(得分:0)

我来这里是为了寻找答案,以解决使用令牌时force_authenticate无法正常工作的问题。对于相同情况的用户,您需要以此答案https://stackoverflow.com/a/65154712/5253580

中指定的方式同时指定用户和令牌