首页 > 解决方案 > 在 Django 中测试主页返回 404

问题描述

编写 Django 测试来测试主页是否正确加载。我网站的主页不是“/”而是“/home/”,“/”和“/home”实际上重定向到“/home/”

所以我为此编写了以下测试套件:

测试main.py

from django.test import TestCase


class homepage_redirects(TestCase):
    def test_redirect_homepage(self):
        r1 = self.client.get('/')
        r2 = self.client.get('/home')
        self.assertEqual(r1.status_code, 301)
        self.assertEqual(r1.url, '/home/')
        self.assertEqual(r2.status_code, 301)
        self.assertEqual(r2.url, '/home/')


class homepage_loads(TestCase):
    def test_homepage(self):
        r = self.client.get('/home/')
        self.assertEqual(r.status_code, 200)

出于某种原因,homepage_redirects测试不会失败,但homepage_loads失败并带有以下回溯。

追溯

self.assertEqual(r.status_code, 200)
AssertionError: 404 != 200

奇怪的是,如果我去 python django shell,我应该得到一个 200 状态码。

蟒蛇壳

In[1]: from django.test import Client

In[2]: c = Client()

In[3]: c.get('/home/')
Out[3]: <HttpResponse status_code=200, "text/html; charset=utf-8">

我究竟做错了什么?

视图.py

from django.shortcuts import render


def home_page(request):
    return render(request, 'app/home_page.html')

网址.py

from django.contrib import admin

urlpatterns = [
    path('admin/', admin.site.urls),
    path('home/', views.home_page),
]

标签: pythondjangodjango-testing

解决方案


urlpatterns = [
    path('admin/', admin.site.urls),
    path('home/', views.home_page),
]

你可能想添加?在您的网址中。如

urlpatterns = [
    path(r'^admin/?', admin.site.urls),
    path(r'^home/?', views.home_page),
]

推荐阅读