简单的Django单元测试返回404 - 正确的设置流程是什么?

0 投票
2 回答
622 浏览
提问于 2025-04-19 03:02

我在做Django项目的时候,觉得写单元测试是个好主意。现在我想给一个视图写个简单的单元测试,但我收到的响应是<h1>未找到</h1><p>请求的URL /index 在这个服务器上未找到。</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 个回答

1

你传给 client.get() 的是一个网址模式的名字,而不是一个实际的路径。你需要传递实际的索引路径,根据那个网址配置,它是“/”。

4

正如Daniel Roseman所说,你不能直接在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)

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

撰写回答