在Django中测试视图时为什么会得到404?

时间:2019-03-26 06:55:55

标签: python django

我正在编写一个测试类来测试我的注册视图。我已经测试过get方法,但是post似乎给出了错误。请帮助我:

这是我的 tests.py

class ViewsTest(TestCase):
    def setUp(self):
        self.client = Client()

    def test_register(self):
        url = reverse('register')
        response = self.client.get(url)
        self.assertEqual(response.status_code, 200)
        response = self.client.post('/',
                                    {
                                        'first_name': 'john',
                                        'last_name': 'doe',
                                        'email': 'johndoe@gmail.com',
                                        'password': 'johndoe'
                                    })
        self.assertEqual(response.status_code, 302)

这是我的 urls.py

url(r'^register/', views.register, name='register'),

这是我的 views.py

def register(request):
    if request.method == 'POST':
        user_form = CustomUserCreationForm(data=request.POST)
        if user_form.is_valid():
            ob = CustomUserCreationForm.register(user_form)
            if ob.is_active is False and ob.is_staff is False:
                return render(request, 'todoapp/waiting.html')
            else:
                return render(request, 'todoapp/admin_success.html')
        else:
            return render(request, 'todoapp/register.html', {'errors': user_form.errors})
    return render(request, 'todoapp/register.html', {'form': CustomUserCreationForm()})

这是我得到的错误

    self.assertEqual(response.status_code, 302)
AssertionError: 404 != 302

1 个答案:

答案 0 :(得分:1)

在这里您应该传递url而不是'/'客户端无法找到该网址,因此返回404

response = self.client.post(url,
                                    {
                                        'first_name': 'john',
                                        'last_name': 'doe',
                                        'email': 'johndoe@gmail.com',
                                        'password': 'johndoe'
                                    })