Я только начал с Django и подумал, что кто-то может просветить меня про простой тест, который я написал, который должен пройти, но, очевидно, нет. Ну, я говорю, что это должно быть, но, будучи довольно новым для Django, я полагаю, что моя нехватка знаний - причина, по которой она терпит неудачу.Тест не проходит в Django, когда он должен
Я продлил модель пользователя django с другой моделью и отношениями один к одному, как предложено в документах, чтобы добавить поле к модели. Эта модель, а именно UserStep, просто содержит целое число, начинающееся с нуля. Я решил также расширить менеджер, чтобы реализовать метод с именем setUserStep, который устанавливает шаг в новое значение, если условие выполнено.
models.py
class UserStepManager(models.Manager):
def setUserStep(self, user, conditional_step, step):
if user.userstep.step == conditional_step:
user.userstep.step = step
user.userstep.save()
class UserStep(models.Model):
"""This model holds the user step count"""
user = models.OneToOneField(User)
step = models.IntegerField(default=0)
# we set the custom manager
objects = UserStepManager()
Затем, когда пользователь подписывает вверх, новый объект UserStep получает создан.
models.py
@receiver(user_signed_up)
def complete_social_signup(sender, **kwargs):
"""We start step to 0"""
user = kwargs.pop('user')
us = UserStep(user=user)
us.save()
Я использую метод setUserStep
, определенный в менеджере в одном из моих взглядов, которая вызывается, когда пользователь запрашивает /phase1/step1/
URL. Итак, если текущий шаг равен нулю, установите его равным 1. Просто так.
views.py
@login_required
def step1(request):
context_dict = {}
UserStep.objects.setUserStep(request.user, 0, 1)
return render(request, 'phase1/step1.html', context_dict)
Я испытал это поведение вручную, зарегистрировавшись и называя эту точку зрения, и все работало, как ожидалось. Когда я проверяю базу данных, user.userstep.step
установлен в 1.
Тогда, будучи хорошим мальчиком, я решил начать писать некоторые тесты (я не в том месте, где я пишу тесты в первую очередь, я должен написать тесты для тестирования моих тестов до этого: P).
tests.py
class MyTests(TestCase):
def setUp(self):
self.test_user = User.objects.create_user(username="test",
email="[email protected]",
password="test")
# Mock user_signed_up signal.
us = UserStep(user=self.test_user)
us.save()
self.c = Client()
def test_step_gets_incremented(self):
self.c.login(username="test", password="test")
response = self.c.get('/phase1/step1/')
# user is logged in, the test should pass
self.assertEqual(response.status_code, 200)
current_user_step = self.test_user.userstep.step
# Test doesn't pass. WHY ME
self.assertEqual(current_user_step, 1)
И БУМ AssertionError: 0 != 1
Я даже делаю простую печать в моем методе просмотра и он вызывается, как это должно быть.
Спасибо!
Что происходит, когда вы явно извлекаете из db, используя что-то вроде 'us = UserStep.objects.get (user = self.test_user); self.assertEqual (us.step, 1) '? – dm03514
: O Почему ???? ты прав! Он проходит! –