Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/21.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/arduino/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python Django请求。测试中未发生用户修改_Python_Django_Django Testing - Fatal编程技术网

Python Django请求。测试中未发生用户修改

Python Django请求。测试中未发生用户修改,python,django,django-testing,Python,Django,Django Testing,我有一个视图正在更改请求的字段。用户: def测试(请求): request.user.is_provider=False request.user.save() 打印(request.user.is\u提供程序) 返回HttpResponse(状态=200) 现在,我正在测试该函数,并进行以下测试: 类角色切换测试(TestCase): def测试开关切换至客户(自身): User=get\u User\u model() user=user.objects.create\u user( u

我有一个视图正在更改
请求的字段。用户

def测试(请求):
request.user.is_provider=False
request.user.save()
打印(request.user.is\u提供程序)
返回HttpResponse(状态=200)
现在,我正在测试该函数,并进行以下测试:

类角色切换测试(TestCase):
def测试开关切换至客户(自身):
User=get\u User\u model()
user=user.objects.create\u user(
username='test',
电子邮件='测试',
密码='test',
first_name='test',
last_name='test',
是_provider=True,
is_admin=False,
)
self.client.login(用户名='test',密码='test')
response=self.client.post('/test/',follow=True)
打印(用户是提供商)
self.assertEqual(response.status_代码,200)
self.assertFalse(user.is\u提供者)

self.assertFalse(user.is\u provider)
在此失败。出于某种原因,
test
中的
request.user.is\u provider
False
,但在
test\u切换到客户时,
user.is\u provider
True
。我知道这些是指同一个用户,因为它们具有相同的
id
,所以为什么不在此处保留修改?

视图和测试在不同的
用户
对象上工作,它们都具有相同的主键。因此,视图所做的更改不会在测试的
用户中进行

您可以重新蚀刻
用户
对象,例如:

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)
        user = User.objects.get(pk=user.pk)  # fetch from database
        print(user.is_provider)
        self.assertEqual(response.status_code, 200)
        self.assertFalse(user.is_provider)
类角色切换测试(TestCase):
def测试开关切换至客户(自身):
User=get\u User\u model()
user=user.objects.create\u user(
username='test',
电子邮件='测试',
密码='test',
first_name='test',
last_name='test',
是_provider=True,
is_admin=False,
)
self.client.login(用户名='test',密码='test')
response=self.client.post('/test/',follow=True)
user=user.objects.get(pk=user.pk)#从数据库中获取
打印(用户是提供商)
self.assertEqual(response.status_代码,200)

self.assertFalse(user.is\u provider)
视图和测试在不同的
user
对象上工作,它们都具有相同的主键。因此,视图所做的更改不会在测试的
用户中进行

您可以重新蚀刻
用户
对象,例如:

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)
        user = User.objects.get(pk=user.pk)  # fetch from database
        print(user.is_provider)
        self.assertEqual(response.status_code, 200)
        self.assertFalse(user.is_provider)
类角色切换测试(TestCase):
def测试开关切换至客户(自身):
User=get\u User\u model()
user=user.objects.create\u user(
username='test',
电子邮件='测试',
密码='test',
first_name='test',
last_name='test',
是_provider=True,
is_admin=False,
)
self.client.login(用户名='test',密码='test')
response=self.client.post('/test/',follow=True)
user=user.objects.get(pk=user.pk)#从数据库中获取
打印(用户是提供商)
self.assertEqual(response.status_代码,200)
self.assertFalse(user.is\u provider)
您应该在发布后使用从数据库重新加载更新的用户

user.refresh_from_db()
发布后,应使用从数据库重新加载更新的用户

user.refresh_from_db()