У меня есть сценарий, в котором я проверяю данные регистрационной формы посетителя (через подкласс UserCreationForm
).
Если не существует ни одного пользователя с именем пользователя, которое предоставляет посетитель, создается новый User
. В противном случае условия проверяются, и посетитель получает сообщение fla sh (ie. f"Username {username} exists. Choose another username."
. После создания TestCase
я создал существующий User
с использованием User.objects.create_user()
. При тестировании представления QuerySet пуст при выполнении запроса User.objects.get()
. В результате возникает User.DoesNotExist
, что не является желаемым результатом. Скорее, желаемый результат - переходить в предложение else
.
Почему тестовая база данных будет пустой из User
экземпляров при тестировании представления при его заполнении в setUpTestData
?
test_views.py
class TestCreateNewChef_Case2(TestCase):
def setUpTestData(cls):
User.objects.create_user(
username='masterchef',
password='password',
)
cls.user_signup_data = {
'username': 'masterchef',
'password1': 'secret',
'password2': 'secret'
}
print(User.objects.all()) # <QuerySet [<User: masterchef>]>
def test_new_chef_sign_up_username_taken(self):
response = self.client.post(
reverse("chef:register"),
self.user_signup_data,
follow=True
)
self.assertRedirects(response, reverse("chef:register"))
self.assertTemplateUsed('chef/register_chef.html')
self.assertContains(
response,
"<p>Username masterchef exists. Choose another username.</p>",
html=True
)
views.py
def register_chef(request):
if request.method == 'POST':
new_user_form = ChefRegisterationForm(request.POST)
if new_user_form.is_valid():
try:
user = User.objects.get(
username=new_user_form.cleaned_data['username']
)
stored_password = check_password(
new_user_form.cleaned_data['check_password'],
user.password
)
except User.DoesNotExist:
# if no Users exist with the username, create a new user
else:
# conditionally check existing users with the submitted username
(Pdb) User.objects.all()
<QuerySet []>
(Pdb) n
>(17)register_chef()
-> user = User.objects.get(
(Pdb) n
> (18)register_chef()
-> username=new_user_form.cleaned_data['username']
(Pdb) n
django.contrib.auth.models.DoesNotExist: User matching query does not exist.