Django REST 框架 APIClient 在 shell 中进行身份验证,但不在我的单元测试中

Django REST framework APIClient authenticating in shell, but not in my unit test

我正在尝试使用此处的示例对 REST API 视图集进行单元测试。如果我 运行 在 manage.py shell 中逐行代码,我可以很好地进行身份验证并获得 200 响应代码。在我的单元测试中,认证失败!

这是class:

class RiskViewSetTest(unittest.TestCase):

    def setUp(self):
        pass

    def testClientView(self):
        client = APIClient()
        client.login(username='test@test.us',password='realpassword')
        response = client.get('/api/v1/risks/')
        self.assertTrue(response.status_code, 200)

如果我将断言更改为:

self.assertTrue(client.login(username='test@test.us',password='realpassword'))

它也失败了,而 shell returns 中的相同命令是正确的。

如果你是运行测试用例,它会自动创建数据库来执行测试。在 shell 中,您已经拥有数据库并且用户在那里,它正在验证。所以你需要在这里创建用户并进行身份验证。请遵循此代码:

class RiskViewSetTest(unittest.TestCase):

    def setUp(self):
        self.client = APIClient()
        User.objects.create_user(
            username='test@test.us', password='realpassword')
    def testClientView(self):
        self.client.login(
            username='test@test.us',password='realpassword')
        response = self.client.get('/api/v1/risks/', format='json')
        self.assertTrue(response.status_code, 200)