测试用户验证视图时出现问题
Problems testing user verification view
我正在为我的用户验证视图编写测试,我遇到了一些我还不知道如何解决的问题。
所以,这是我正在测试的视图:
def verify(request, uidb64, token):
try:
uid = force_text(urlsafe_base64_decode(uidb64))
user = User.objects.get(pk=uid)
except(TypeError, ValueError, OverflowError, User.DoesNotExist):
user = None
if user is not None and account_activation_token.check_token(user, token):
user.is_verified = True
user.save()
print(user.is_verified)
return HttpResponse('Your account was activated!')
else:
return HttpResponse('Activation link is invalid!')
当我 运行 服务器和用户将他的 is_activated
设置为 True
时,它工作正常
但是,这是一个测试:
def test_new_user_verification(self):
new_user = User.objects.create_user('humapen4@gmail.com', 'Abc1234567')
# visit activation link
link = reverse('verify',
kwargs={'uidb64': urlsafe_base64_encode(force_bytes(new_user.pk)).decode(),
'token': account_activation_token.make_token(new_user)})
resp = self.client.get(link)
self.assertEqual(resp.status_code, 200)
self.assertTrue(new_user.is_verified)
第一个测试顺利通过,但第二个测试失败,因为在测试中 new_user.is_verified
等于 False
。我不明白为什么,当我将 print(user.is_verified)
添加到视图时,它打印 True
,但在测试中它是 False
.
知道为什么吗?
您需要在执行验证后刷新对象:
resp = self.client.get(link)
new_user.refresh_from_db()
原因是它是一个简单的值字段。在对象 created/retrieved 之后,此类非延迟字段不会自动从数据库中刷新。换句话说,该值是最初在 create_user
中设置的值。要获得新值,您必须刷新它。
我正在为我的用户验证视图编写测试,我遇到了一些我还不知道如何解决的问题。 所以,这是我正在测试的视图:
def verify(request, uidb64, token):
try:
uid = force_text(urlsafe_base64_decode(uidb64))
user = User.objects.get(pk=uid)
except(TypeError, ValueError, OverflowError, User.DoesNotExist):
user = None
if user is not None and account_activation_token.check_token(user, token):
user.is_verified = True
user.save()
print(user.is_verified)
return HttpResponse('Your account was activated!')
else:
return HttpResponse('Activation link is invalid!')
当我 运行 服务器和用户将他的 is_activated
设置为 True
但是,这是一个测试:
def test_new_user_verification(self):
new_user = User.objects.create_user('humapen4@gmail.com', 'Abc1234567')
# visit activation link
link = reverse('verify',
kwargs={'uidb64': urlsafe_base64_encode(force_bytes(new_user.pk)).decode(),
'token': account_activation_token.make_token(new_user)})
resp = self.client.get(link)
self.assertEqual(resp.status_code, 200)
self.assertTrue(new_user.is_verified)
第一个测试顺利通过,但第二个测试失败,因为在测试中 new_user.is_verified
等于 False
。我不明白为什么,当我将 print(user.is_verified)
添加到视图时,它打印 True
,但在测试中它是 False
.
知道为什么吗?
您需要在执行验证后刷新对象:
resp = self.client.get(link)
new_user.refresh_from_db()
原因是它是一个简单的值字段。在对象 created/retrieved 之后,此类非延迟字段不会自动从数据库中刷新。换句话说,该值是最初在 create_user
中设置的值。要获得新值,您必须刷新它。