Django-TestCase-response.status代码失败

问题描述

大家好,

我正在通过django测试代码开始我的旅程。开始不是很好。

我将开始一些非常基本的测试(非常重要),如下所示:

from django.test import TestCase,SimpleTestCase
from django.urls import reverse

# Create your tests here.

class RegistryTest(SimpleTestCase):

    def test_homepage_status(self):
        response = self.client.get('Registry/search/')
        self.assertEqual(response.status_code,200)

    def test_homepage_url_name(self):
        response = self.client.get(reverse('search'))
        self.assertEqual(response.status_code,200)

    def test_homepage_template(self):
        response = self.client.get('Registry/search/')
        self.assertTemplateUsed(response,'registry/search_registry.html')

这是我的urls.py:

from django.contrib import admin
from django.urls import include
from django.urls import path
from django.conf.urls import url
from .views import *

app_name = 'registry'

urlpatterns = [
    path('search/',search,name='search'),#customersupplier
    path('customersupplier/detail/<int:idCS>/',detail_customersupplier,name='detail_customersupplier'),path('customersupplier/new/',new_customersupplier,name='new_customersupplier'),]

这是我在views.py中的搜索视图:

def search(request):
    if request.method == 'POST':
        form = SearchForm(request.POST)

        if form.is_valid():
            azienda = form.cleaned_data['Company']
            testo   = form.cleaned_data['RagSociale']
            tipo    = form.cleaned_data['Tipologia']

            result = Customersupplier.search(azienda,testo,tipo)
            return render(request,'registry/search_registry.html',{'form': form,'CustomersupplierList':result })

    else:
        form = SearchForm()
        return render(request,{'form': form })

这是项目提交者的邮件urls.py:

from django.contrib import admin
from django.urls import include
from django.urls import path
from django.conf.urls import url
from .views import *

app_name = 'registry'

urlpatterns = [
    path('search/',]

运行测试时,我会返回此错误

python manage.py测试注册表系统检查未发现任何问题(0 沉)。 FFE ================================================== ===================错误:test_homepage_url_name(tests.RegistryTest) -------------------------------------------------- --------------------追溯(最近一次通话):文件 “ /home/carloc/Projects/100_CogniSpa/gestionale-cogni/src/Registry/tests.py”, 第13行,在test_homepage_url_name中 response = self.client.get(reverse('search'))文件“ /home/carloc/.local/lib/python3.7/site-packages/django/urls/base.py”, 第90行,反过来 返回iri_to_uri(resolver._reverse_with_prefix(view,prefix,* args,** kwargs))文件“ /home/carloc/.local/lib/python3.7/site-packages/django/urls/resolvers.py”, _reverse_with_prefix中的第660行 引发noreverseMatch(msg)django.urls.exceptions.noreverseMatch:找不到“搜索”的反向项。 “搜索”不是有效的视图功能 或图案名称

================================================ =======================失败:test_homepage_status(tests.RegistryTest) -------------------------------------------------- --------------------追溯(最近一次通话):文件 “ /home/carloc/Projects/100_CogniSpa/gestionale-cogni/src/Registry/tests.py”, 第10行,在test_homepage_status中 self.assertEqual(response.status_code,200)AssertionError:404!= 200

================================================ =======================失败:test_homepage_template(tests.RegistryTest) -------------------------------------------------- --------------------追溯(最近一次通话):文件 “ /home/carloc/Projects/100_CogniSpa/gestionale-cogni/src/Registry/tests.py”, 第18行,在test_homepage_template中 self.assertTemplateUsed(response,'registry / search_registry.html')文件 “ /home/carloc/.local/lib/python3.7/site-packages/django/test/testcases.py”, assertTemplateUsed中的第639行 self.fail(msg_prefix +“没有用于呈现响应的模板”)AssertionError:没有用于呈现响应的模板

--------------------------------------------------- -----------------------在0.008秒内进行了3次测试

失败(失败= 2,错误= 1)

我有点迷路了... 该模板位于应用程序中的templates / registry / search_registry.html处,但仍显示没有用于响应的模板。

有帮助吗?

非常感谢您。

卡洛

解决方法

好了。

2个值得指出的问题:

第一:client.get()方法应为:

response = self.client.get('/your/path/')

而不是:

response = self.client.get('your/path/')

第一个斜杠很重要。

第二:在我的情况下,我正在使用“ SimpleTestCase”进行测试,该测试不允许连接到数据库,我的视图需要使用该连接才能正确处理测试。因此,我切换到class RegistryTest(TestCase): .....

通过进行此更正,第三个也是最后一个测试('assertTemplateUsed')也通过了测试。

非常感谢你们的提示。真的有帮助