Проблемы с тестированием представления подтверждения пользователя - PullRequest
0 голосов
/ 17 февраля 2019

Я пишу тесты для своего пользовательского представления проверки, и я столкнулся с проблемой, которую пока не знаю, как ее решить.Итак, вот представление, которое я тестирую:

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

Но вотtest:

    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.

Есть идеи почему?

1 Ответ

0 голосов
/ 17 февраля 2019

Вам необходимо обновить объект после выполнения проверки:

resp = self.client.get(link)

new_user.refresh_from_db()

Причина в том, что это простое поле значений.Такие неотложенные поля не обновляются из базы данных автоматически после того, как объект был создан / извлечен.Другими словами, значение это то, что было изначально установлено в create_user.Чтобы получить новое значение, вы должны обновить его.

См. Документацию .

...