如何为 Django 中的视图编写 get 和 post 测试方法?
how to write get and post test methods for views in django?
我是 Django 测试的新手,正在尝试为视图编写测试函数,但我不了解整个测试视图的事情,我看过很多示例,但似乎很难,我需要一个关于我写的东西的例子来理解这个想法。
这是一个函数,我想测试它的 post 并得到:
def ForgetPasswordRegistry(self, request):
forgetpassword = True
if request.method == 'GET':
if 'UserID' in request.session:
forgetpassword = False
return request, forgetpassword
elif request.method == 'POST':
email = request.POST['email']
if self.IsUserExist(email):
forget = models.ForgetPasswordRegistry()
forget.UserID = self.GetUser(email)
forget.Access = 1
session = random.randint(999999999999999, 9999999999999999999999999999999999)
forget.Session = str(session)
link = 'http://127.0.0.1:8000/home/resetpassword/' + forget.Session
self.SendEmail('Reset-Password', link, [forget.UserID.Email])
forget.save()
FeedBack = ' Check Your Mail You Got A Recovery Mail'
AlertType = 'alert-success'
return request, AlertType, None, FeedBack, None, None
else:
AlertType = 'alert-danger'
ModalFeedBack = 'This Email Dose Not Exist'
EmailErrors = 'This Email Dose Not Exist'
return request, AlertType, forgetpassword, None, EmailErrors, ModalFeedBack
使用 Django 的测试客户端:https://docs.djangoproject.com/en/stable/topics/testing/tools/#the-test-client
示例:
from django.test import Client, TestCase
class ViewTestCase(TestCase):
def test_post_creation(self):
c = Client() # instantiate the Django test client
response = c.get('/forgetpassword/')
self.assertEqual(response.status, 200)
不要让视图的概念混淆了你!!本质上有一个 python 函数,您需要使用它的某些条件。
好像有4个主要分支:
- GET 不在会话中
- 在会话中获取
- POST 存在
- POST不存在
所以应该至少有 4 个不同的测试。我将 post 第一个,因为它非常简单:
def ForgetPasswordRegistry(self, request):
forgetpassword = True
if request.method == 'GET':
if 'UserID' in request.session:
forgetpassword = False
return request, forgetpassword
def test_forget_get_user_id_in_session(self):
request = Mock(session={'UserID': 'here'}, method='GET')
# instantiate your view class
yourview = YourView()
sefl.assertEqual(yourview.ForgetPasswordRegistry(request), (request, False))
post user exists 分支有点复杂,因为测试需要考虑更多的事情,并可能为以下项目提供存根实现:
- 发送邮件
- 获取用户
- models.ForgetPasswordRegistry()
我是 Django 测试的新手,正在尝试为视图编写测试函数,但我不了解整个测试视图的事情,我看过很多示例,但似乎很难,我需要一个关于我写的东西的例子来理解这个想法。 这是一个函数,我想测试它的 post 并得到:
def ForgetPasswordRegistry(self, request):
forgetpassword = True
if request.method == 'GET':
if 'UserID' in request.session:
forgetpassword = False
return request, forgetpassword
elif request.method == 'POST':
email = request.POST['email']
if self.IsUserExist(email):
forget = models.ForgetPasswordRegistry()
forget.UserID = self.GetUser(email)
forget.Access = 1
session = random.randint(999999999999999, 9999999999999999999999999999999999)
forget.Session = str(session)
link = 'http://127.0.0.1:8000/home/resetpassword/' + forget.Session
self.SendEmail('Reset-Password', link, [forget.UserID.Email])
forget.save()
FeedBack = ' Check Your Mail You Got A Recovery Mail'
AlertType = 'alert-success'
return request, AlertType, None, FeedBack, None, None
else:
AlertType = 'alert-danger'
ModalFeedBack = 'This Email Dose Not Exist'
EmailErrors = 'This Email Dose Not Exist'
return request, AlertType, forgetpassword, None, EmailErrors, ModalFeedBack
使用 Django 的测试客户端:https://docs.djangoproject.com/en/stable/topics/testing/tools/#the-test-client
示例:
from django.test import Client, TestCase
class ViewTestCase(TestCase):
def test_post_creation(self):
c = Client() # instantiate the Django test client
response = c.get('/forgetpassword/')
self.assertEqual(response.status, 200)
不要让视图的概念混淆了你!!本质上有一个 python 函数,您需要使用它的某些条件。
好像有4个主要分支:
- GET 不在会话中
- 在会话中获取
- POST 存在
- POST不存在
所以应该至少有 4 个不同的测试。我将 post 第一个,因为它非常简单:
def ForgetPasswordRegistry(self, request):
forgetpassword = True
if request.method == 'GET':
if 'UserID' in request.session:
forgetpassword = False
return request, forgetpassword
def test_forget_get_user_id_in_session(self):
request = Mock(session={'UserID': 'here'}, method='GET')
# instantiate your view class
yourview = YourView()
sefl.assertEqual(yourview.ForgetPasswordRegistry(request), (request, False))
post user exists 分支有点复杂,因为测试需要考虑更多的事情,并可能为以下项目提供存根实现:
- 发送邮件
- 获取用户
- models.ForgetPasswordRegistry()