简单的django单元测试给出404 - 什么是正确的设置程序?

时间:2014-08-31 21:22:17

标签: python django unit-testing

我在Django项目中取得了一些进展并决定了单元测试是一个好主意。我试图围绕一个视图编写一个简单的单元测试,但我从响应中得到<h1>Not Found</h1><p>The requested URL /index was not found on this server.</p>。为什么会这样?

这是我的单元测试..

from django.test import TestCase

class BookerIndexTests(TestCase):
    def test_anonymous_request(self):
        response = self.client.get('booker:index')
        self.assertEqual(response.status_code, 200)

在我的urls.py中,我的索引为url(r'^$', views.index, name='index'),

我在这里错过了设置步骤吗?为什么这个基本单元测试会抛出404错误?

2 个答案:

答案 0 :(得分:4)

丹尼尔罗斯曼指出,你不能直接在client.get()中使用模式名称。如果要使用模式名称而不是路径本身,可以使用reverse。您的代码可能如下所示:

from django.test import TestCase
from django.core.urlresolvers import reverse


class BookerIndexTests(TestCase):
    def test_anonymous_request(self):
        response = self.client.get(reverse('booker:index'))
        self.assertEqual(response.status_code, 200)

这通常是我在测试套件中所做的,因为我更喜欢在路径上使用模式名称。

答案 1 :(得分:1)

您将网址格式名称传递给client.get(),而不是实际路径。你需要传递实际的索引路径,根据那个urlconf - “/".