【发布时间】:2020-04-15 13:30:30
【问题描述】:
这是用于将数据发送到视图的表单:
class RegisterForm(forms.Form):
username = forms.CharField(widget=forms.TextInput(attrs={
'class': 'form-control',
'placeholder': _('User Name')
}))
password = forms.CharField(widget=forms.PasswordInput(attrs={
'class': 'form-control',
'placeholder': _('Password')
}))
roles = forms.ModelChoiceField(queryset=Role.objects.exclude(role_name="Admin"), widget=forms.Select(attrs={
'class': 'form-control',
}))
这是正在测试其中的表单的视图:
def register(request):
user = request.user
current_user = CustomUser.objects.get(username=user.username)
if current_user.role.role_name == "Admin":
register_form = RegisterForm(request.POST)
if request.method == "POST":
if register_form.is_valid():
username = register_form.cleaned_data['username']
password = register_form.cleaned_data['password']
role = register_form.cleaned_data['roles']
if CustomUser.objects.filter(username=username).exists():
messages.error(request, _('Username already exists.'))
else:
new_user = CustomUser.objects.create_user(username=username, password=password, role=role)
messages.success(request, _('User created Successfully'))
return redirect("user_details", pk=new_user.pk)
else:
register_form = RegisterForm(request.POST)
context = {
'register_form': register_form,
}
return render(request, 'register.html', context)
else:
messages.error(request, _('You are not allowed to view this page.'))
return redirect('index')
这是我尝试通过发送带有数据的发布请求 (reverse) 来测试它的方法:
def test_post_request_correct_date(self):
call_command("start_app")
self.client.login(username='user', password='pass')
waiter_role = Role.objects.get(role_name="Waiter")
url = reverse('register')
data = {
'username': 'new_user',
'password': 'just good password',
'roles': waiter_role.pk
}
response = self.client.post(url, data, follow=True)
self.assertEqual(response.status_code, 302)
new_user = CustomUser.objects.get(username="new_user")
self.assertRedirects(response, reverse('user_details', args={"pk": new_user.pk}))
self.assertTemplateUsed(response, 'user_profile.html')
请注意call_command("start_app") 是自定义命令,用于创建我从中选择的角色。
我得到这个错误:
self.assertEqual(response.status_code, 302)
AssertionError: 200 != 302
【问题讨论】:
标签: python django unit-testing django-forms