Django 2测试有效和无效表单的响应

时间:2018-04-26 11:30:29

标签: django unit-testing

我做了一个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,但我没有找到关于如何使用它的好例子或教程。

2 个答案:

答案 0 :(得分:2)

如果您总是得到200,那是因为您的表单总是无效。您的视图会在成功保存时重定向,即302。

测试表单已保存的方法是检查新项目是否确实在数据库中:

self.assertTrue(Employee.objects.filter(first_name='Testy').exists()) 

或其他什么。

答案 1 :(得分:0)

以下是两种情况:

  1. 您的表单有效,它将被保存并重定向到new_name_form,这意味着成功重定向。由于它是一个成功的重定向,您将获得状态代码200。

  2. 当您的表单无效时,也会发生同样的事情,即它将开始呈现create_or_update_profile页面。因此成功渲染和200状态代码。

  3. 所以无论哪种方式,你都会获得成功的重定向。

    如果您想查看表单,这是更好的方法:

    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())
    

    无需测试重定向。如果表格有效,它肯定会正常工作。

    希望有所帮助。