Login, Register and Logout test failed AssertionError: 200 != 302 django
Login, Register and Logout test failed AssertionError: 200 != 302 django
我正在尝试为我的登录、注销和注册视图创建测试,但我一直收到此错误 AssertionError: 200 != 302。以下是代码:
型号
这是用户模型
from django.db import models
from django.contrib.auth.models import AbstractUser
class User(AbstractUser):
full_name = models.CharField(max_length=300, null=True, blank=True)
username = models.CharField(max_length=150)
email = models.EmailField(unique=True)
avatar = models.ImageField(upload_to='user-profile-images/', null=True)
USERNAME_FIELD = 'email'
REQUIRED_FIELDS = ['username']
观看次数
这里是登录注册功能视图
def loginPage(request):
context = {}
if request.user.is_authenticated:
return redirect('home')
if request.method == 'POST':
email = request.POST.get('email')
password = request.POST.get('password')
try:
user = User.objects.get(email=email)
except:
messages.error(request, 'User does not exist')
user = authenticate(request, email=email, password=password)
if user is not None:
login(request, user)
return redirect('home')
return render(request,'registration/login.html', context)
def registerPage(request):
form = SignupForm
if request.method == 'POST':
form = SignupForm(request.POST)
if form.is_valid():
user = form.save(commit=False)
user.username = user.username.lower()
user.save()
login(request, user)
return redirect ('home')
else:
messages.error(request, 'An error occured during registration')
return render(request, 'registration/register.html', {'form':form})
def logoutPage(request):
logout(request)
return redirect('home')
网址
from django.urls import path
from . import views
urlpatterns = [
path('login/', views.loginPage, name='login'),
path('logout/', views.logoutPage, name='logout'),
path('register/', views.registerPage, name='register'),
]
测试
from django.test import TestCase, Client
from django.urls import reverse
from mydp_app.models import User
class TestViews(TestCase):
def setUp(self):
self.client = Client()
self.login_url = reverse('login')
self.logout_url = reverse('logout')
self.register_url = reverse('register')
def test_register_post(self):
response = self.client.post(reverse('register'), {
'full_name': 'Test User',
'username': 'testuser',
'email': 'testuser@gmail.com',
'password': 'testpassword',
'password2': 'testpassword',
})
self.assertEquals(response.status_code, 302)
def test_login_post(self):
response = self.client.post(reverse('login'), {
'email': 'testuser@gmail.com',
'password': 'testpassword',
})
self.assertEquals(response.status_code, 302)
def test_logout(self):
self.client.login(email='testuser@gmail.com', password='testpassword')
response = self.client.post(reverse('logout'), follow=True)
self.assertEquals(response.status_code, 302)
测试期望状态代码为 200 但它会被重定向。我不断收到此错误 self.assertEquals(response.status_code, 302) AssertionError: 200 != 302
如果您想测试用户是否已成功重定向(响应代码 302),那么您可以删除 follow=True
:
def test_logged_out_user_was_redirected(self):
self.client.login(email='testuser@gmail.com', password='testpassword')
response = self.client.post(reverse('logout'))
self.assertEquals(response.status_code, 302)
如果您想确保它们被重定向到正确的位置,您可以设置 follow=True
,将代码设置为 200,然后使用 assertTemplateUsed
:
def test_logout_redirect_succeeds(self):
self.client.login(email='testuser@gmail.com', password='testpassword')
response = self.client.post(reverse('logout'), follow=True)
self.assertEquals(response.status_code, 200)
self.assertTemplateUsed(self.response, 'my_app/redirect_page.html')`
当您 follow=True
如果成功,响应代码将是 200,而不是 302。
很久以前问过,得知follow=True
在pytest中是不行的。在这个过程中,我学到了一些关于使用 follow=True
标志的知识。
我猜现在唯一失败的测试是 test_logout
。您的代码是:
response = self.client.post(reverse('logout'), follow=True)
self.assertEquals(response.status_code, 302)
如果您有任何问题或需要澄清,请告诉我,我可以解决这个问题。如果我弄错了请告诉我。
我正在尝试为我的登录、注销和注册视图创建测试,但我一直收到此错误 AssertionError: 200 != 302。以下是代码:
型号 这是用户模型
from django.db import models
from django.contrib.auth.models import AbstractUser
class User(AbstractUser):
full_name = models.CharField(max_length=300, null=True, blank=True)
username = models.CharField(max_length=150)
email = models.EmailField(unique=True)
avatar = models.ImageField(upload_to='user-profile-images/', null=True)
USERNAME_FIELD = 'email'
REQUIRED_FIELDS = ['username']
观看次数 这里是登录注册功能视图
def loginPage(request):
context = {}
if request.user.is_authenticated:
return redirect('home')
if request.method == 'POST':
email = request.POST.get('email')
password = request.POST.get('password')
try:
user = User.objects.get(email=email)
except:
messages.error(request, 'User does not exist')
user = authenticate(request, email=email, password=password)
if user is not None:
login(request, user)
return redirect('home')
return render(request,'registration/login.html', context)
def registerPage(request):
form = SignupForm
if request.method == 'POST':
form = SignupForm(request.POST)
if form.is_valid():
user = form.save(commit=False)
user.username = user.username.lower()
user.save()
login(request, user)
return redirect ('home')
else:
messages.error(request, 'An error occured during registration')
return render(request, 'registration/register.html', {'form':form})
def logoutPage(request):
logout(request)
return redirect('home')
网址
from django.urls import path
from . import views
urlpatterns = [
path('login/', views.loginPage, name='login'),
path('logout/', views.logoutPage, name='logout'),
path('register/', views.registerPage, name='register'),
]
测试
from django.test import TestCase, Client
from django.urls import reverse
from mydp_app.models import User
class TestViews(TestCase):
def setUp(self):
self.client = Client()
self.login_url = reverse('login')
self.logout_url = reverse('logout')
self.register_url = reverse('register')
def test_register_post(self):
response = self.client.post(reverse('register'), {
'full_name': 'Test User',
'username': 'testuser',
'email': 'testuser@gmail.com',
'password': 'testpassword',
'password2': 'testpassword',
})
self.assertEquals(response.status_code, 302)
def test_login_post(self):
response = self.client.post(reverse('login'), {
'email': 'testuser@gmail.com',
'password': 'testpassword',
})
self.assertEquals(response.status_code, 302)
def test_logout(self):
self.client.login(email='testuser@gmail.com', password='testpassword')
response = self.client.post(reverse('logout'), follow=True)
self.assertEquals(response.status_code, 302)
测试期望状态代码为 200 但它会被重定向。我不断收到此错误 self.assertEquals(response.status_code, 302) AssertionError: 200 != 302
如果您想测试用户是否已成功重定向(响应代码 302),那么您可以删除 follow=True
:
def test_logged_out_user_was_redirected(self):
self.client.login(email='testuser@gmail.com', password='testpassword')
response = self.client.post(reverse('logout'))
self.assertEquals(response.status_code, 302)
如果您想确保它们被重定向到正确的位置,您可以设置 follow=True
,将代码设置为 200,然后使用 assertTemplateUsed
:
def test_logout_redirect_succeeds(self):
self.client.login(email='testuser@gmail.com', password='testpassword')
response = self.client.post(reverse('logout'), follow=True)
self.assertEquals(response.status_code, 200)
self.assertTemplateUsed(self.response, 'my_app/redirect_page.html')`
当您 follow=True
如果成功,响应代码将是 200,而不是 302。
很久以前问过follow=True
在pytest中是不行的。在这个过程中,我学到了一些关于使用 follow=True
标志的知识。
我猜现在唯一失败的测试是 test_logout
。您的代码是:
response = self.client.post(reverse('logout'), follow=True)
self.assertEquals(response.status_code, 302)
如果您有任何问题或需要澄清,请告诉我,我可以解决这个问题。如果我弄错了请告诉我。