Django request.user修改未在测试中进行

问题描述 投票:1回答:2

我有一个正在更改request.user字段的视图:

def test(request):                  
    request.user.is_provider = False
    request.user.save()
    print(request.user.is_provider)
    return HttpResponse(status=200)

现在我正在测试该功能,并且具有以下测试:

class RoleSwitchTests(TestCase):
    def test_switch_to_customer(self):
        User = get_user_model()
        user = User.objects.create_user(
            username='test',
            email='test',
            password='test',
            first_name='test',
            last_name='test',
            is_provider=True,
            is_admin=False,
        )
        self.client.login(username='test', password='test')
        response = self.client.post('/test/', follow=True)
        print(user.is_provider)
        self.assertEqual(response.status_code, 200)
        self.assertFalse(user.is_provider)

self.assertFalse(user.is_provider)在这里失败。由于某些原因,request.user.is_providerFalse中为test,但在test_switch_to_customer中,user.is_providerTrue。我知道这些对象指的是同一用户,因为它们具有相同的id,那么为什么这里不保存修改?

python django django-testing
2个回答
0
投票

视图和测试正在不同的User对象上工作,它们都具有相同的主键。因此,在测试的user中未完成视图所做的更改。


0
投票

发布后,您应该使用refresh_from_db从数据库重新加载更新的用户

© www.soinside.com 2019 - 2024. All rights reserved.