我做了一个TestCase
来检查我是否会得到正确的响应和页面重定向,但它没有像我想象的那样工作。当我尝试一个有效的表格时,我得到了我期望的回复,但是当我把它变成无效时,我仍然得到了同样的答案。
views.py(我离开'GET''其他:')
def create_employee_profile(request):
if request.POST:
name_form = EmployeeNameForm(request.POST)
if name_form.is_valid():
new_name_form = name_form.save()
return redirect(new_name_form)
else:
return render(request,
'service/create_or_update_profile.html',
{'name_form': name_form}
)
Test.py
class TestCreateEmployeeProfileView(TestCase):
def test_redirect_on_success(self):
response = self.client.post('/service/', {
'first_name': 'Test', # Required
'middile_name': 'Testy', # Optional
'last_name': '', # Required
})
self.assertEqual(response.status_code, 200)
我想在我提问时,我不妨问一下如何访问redirect
来测试它。
成功时,新路径应为/service/name/1/
,“1”为创建对象的“pk”。
我知道我见过SimpleTestCase
,但我没有找到关于如何使用它的好例子或教程。
答案 0 :(得分:2)
如果您总是得到200,那是因为您的表单总是无效。您的视图会在成功保存时重定向,即302。
测试表单已保存的方法是检查新项目是否确实在数据库中:
self.assertTrue(Employee.objects.filter(first_name='Testy').exists())
或其他什么。
答案 1 :(得分:0)
以下是两种情况:
您的表单有效,它将被保存并重定向到new_name_form
,这意味着成功重定向。由于它是一个成功的重定向,您将获得状态代码200。
当您的表单无效时,也会发生同样的事情,即它将开始呈现create_or_update_profile
页面。因此成功渲染和200状态代码。
所以无论哪种方式,你都会获得成功的重定向。
如果您想查看表单,这是更好的方法:
from form import EmployeeNameForm
class TestCreateEmployeeProfileView(TestCase):
def test_redirect_on_success(self):
form = UserForm(data='first_name': 'Test', # Required
'middile_name': 'Testy', # Optional
'last_name': '',)
self.assertTrue(form.is_valid())
def test_redirect_on_failure(self):
form = UserForm(data='first_name': 'Test', # Required
'middile_name': 'Testy', # Optional
'last_name': '',)
self.assertFalse(form.is_valid())
无需测试重定向。如果表格有效,它肯定会正常工作。
希望有所帮助。