Django 模型实例仅在再次调用 objects.get() 后更新(DRF 测试用例)
Djnago model instance only update after calling objects.get() again (DRF Test case)
我有一个 APIView (DRF),我将用户 is_active 字段设置为 False 而不是删除他,一切都按预期工作,但我有一个当我尝试为视图制作测试用例时的有线行为,我尝试在调用 ApiView 后测试字段 'is_active' 是否为 False 但如果稍微更改代码并调用 'True' =28=]() 在调用 ApiView 后使用相同的用户电子邮件,新实例字段 is_active 为 False。
我从来没有遇到过这种行为,谁能解释一下背后的原因?谢谢!
此测试通过:
def test_delete_account(self):
self.authentication() # create user and log him in
user = User.objects.get(email=self.sample_user['email'])
self.assertEqual(user.is_active, True)
response = self.client.post(reverse('delete-account'))
self.assertEqual(response.status_code, status.HTTP_204_NO_CONTENT)
user = User.objects.get(email=self.sample_user['email'])
self.assertEqual(user.is_active,False)
此测试失败:
def test_delete_account(self):
self.authentication() # create user and log him in
user = User.objects.get(email=self.sample_user['email'])
self.assertEqual(user.is_active, True)
response = self.client.post(reverse('delete-account'))
self.assertEqual(response.status_code, status.HTTP_204_NO_CONTENT)
self.assertEqual(user.is_active,False) # FAILS HERE
删除帐户 ApiView:
class DeleteAccountAPIView(GenericAPIView):
permission_classes = (permissions.IsAuthenticated,)
def post(self, request):
user = self.request.user
user.is_active = False
user.save()
return Response(status=status.HTTP_204_NO_CONTENT)
在您的测试中,您正在调用 'remote' 请求,更改在 'remote':
client ---- (call via post) --> remote
(the test) (django web app)
| |
---------------------------------
|
database
事情是这样的:
# you get a user from database
user = User.objects.get(email=self.sample_user['email'])
# you make a post to 'remote' server
response = self.client.post(reverse('delete-account'))
# no changes should be in 'client' side
self.assertEqual(user.is_active,True)
# when you refresh data from database
user = User.objects.get(email=self.sample_user['email'])
# you get the current database data that contains changes from remote
self.assertEqual(user.is_active,False)
我有一个 APIView (DRF),我将用户 is_active 字段设置为 False 而不是删除他,一切都按预期工作,但我有一个当我尝试为视图制作测试用例时的有线行为,我尝试在调用 ApiView 后测试字段 'is_active' 是否为 False 但如果稍微更改代码并调用 'True' =28=]() 在调用 ApiView 后使用相同的用户电子邮件,新实例字段 is_active 为 False。
我从来没有遇到过这种行为,谁能解释一下背后的原因?谢谢!
此测试通过:
def test_delete_account(self):
self.authentication() # create user and log him in
user = User.objects.get(email=self.sample_user['email'])
self.assertEqual(user.is_active, True)
response = self.client.post(reverse('delete-account'))
self.assertEqual(response.status_code, status.HTTP_204_NO_CONTENT)
user = User.objects.get(email=self.sample_user['email'])
self.assertEqual(user.is_active,False)
此测试失败:
def test_delete_account(self):
self.authentication() # create user and log him in
user = User.objects.get(email=self.sample_user['email'])
self.assertEqual(user.is_active, True)
response = self.client.post(reverse('delete-account'))
self.assertEqual(response.status_code, status.HTTP_204_NO_CONTENT)
self.assertEqual(user.is_active,False) # FAILS HERE
删除帐户 ApiView:
class DeleteAccountAPIView(GenericAPIView):
permission_classes = (permissions.IsAuthenticated,)
def post(self, request):
user = self.request.user
user.is_active = False
user.save()
return Response(status=status.HTTP_204_NO_CONTENT)
在您的测试中,您正在调用 'remote' 请求,更改在 'remote':
client ---- (call via post) --> remote
(the test) (django web app)
| |
---------------------------------
|
database
事情是这样的:
# you get a user from database
user = User.objects.get(email=self.sample_user['email'])
# you make a post to 'remote' server
response = self.client.post(reverse('delete-account'))
# no changes should be in 'client' side
self.assertEqual(user.is_active,True)
# when you refresh data from database
user = User.objects.get(email=self.sample_user['email'])
# you get the current database data that contains changes from remote
self.assertEqual(user.is_active,False)