Как правильно написать тест (pytest) для RegisterView не работает (представление работает правильно)
У меня получилось создать View для регистрации пользователя в django. И это работает. Пользователь, добавленный вручную через форму (пост), отображается в базе данных.
В настоящее время я пытаюсь написать тест для этого представления, и это не удается. Я продолжаю получать;
AttributeError: 'User' object has no attribute 'items'
tests.py
# test for Register View
@pytest.mark.django_db
def test_012_register_view_post(client, new_user):
url = reverse('register')
response = client.post(url, new_user)
assert response.status_code == 302
assert response.url == reverse('login')
User.objects.get(**new_user)
conftest.py (протестировано 2 разных приспособления) - оба возвращают одинаковый результат (AttributeError)
@pytest.fixture
def users():
lst = []
for user in range(10):
user_name = 'User_' + str(user)
lst.append(User.objects.create(username=user_name))
return lst
@pytest.fixture
def new_user():
username = 'User@test.pl'
email = 'User@test.pl'
first_name = 'User'
last_name = 'Test'
x = User.objects.create(username=username, email=email, first_name=first_name, last_name=last_name)
x.save()
return x
view.py
class RegisterView(View):
def get(self, request):
form = RegisterForm()
return render(request, 'register.html', {'form': form})
def post(self, request):
form = RegisterForm(request.POST)
if form.is_valid():
email = form.cleaned_data['email']
password = form.cleaned_data['password1']
first_name = form.cleaned_data['first_name']
last_name = form.cleaned_data['last_name']
u = User()
u.username = email
u.email = email
u.first_name = first_name
u.last_name = last_name
u.set_password(password)
u.save()
return redirect('/login')
return render(request, 'form.html', {'form': form})
form.py
class RegisterForm(forms.ModelForm):
first_name = forms.CharField(max_length=128, widget=forms.TextInput(attrs={'class': 'form-group',
'placeholder': 'Imię'}), label='')
last_name = forms.CharField(max_length=128, widget=forms.TextInput(attrs={'class': 'form-group',
'placeholder': 'Nazwisko'}), label='')
email = forms.EmailField(max_length=128, widget=forms.EmailInput(attrs={'class': 'form-group',
'placeholder': 'Email'}), label='')
password1 = forms.CharField(max_length=128, widget=forms.PasswordInput(attrs={'class': 'form-group',
'placeholder': 'Hasło'}), label='')
password2 = forms.CharField(max_length=128, widget=forms.PasswordInput(attrs={'class': 'form-group',
'placeholder': 'Powtórz hasło'}),
label='')
class Meta:
model = User
fields = ['email']
def clean(self):
data = super().clean()
if data['password1'] != data['password2']:
raise ValidationError('Hasła nie są takie same')
return data
шаблон register.py
{% extends 'base.html' %}
{% block content %}
<header class="header">
{% include 'nav-not-logged.html' %}
<section class="login-page">
<h2>Załóż konto</h2>
<form method="post">
{% csrf_token %}
{% for fm in form %}
<div class="form-group">
{{ fm }}
</div>
{% endfor %}
<div class="form-group form-group--buttons">
<button class="btn" type="submit">Załóż konto</button>
<a href="{% url 'login' %}" class="btn btn--without-border">Zaloguj się</a>
</div>
</form>
</section>
</header>
{% endblock %}
urls.py
urlpatterns = [
path('admin/', admin.site.urls),
path("", views.LandingPageView.as_view(), name='landing-page'),
path("register/", views.RegisterView.as_view(), name='register'),
Что означает эта ошибка? И как я могу заставить тест работать?