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, 'registry/search_registry.html', {'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/', search, name='search'),

    #customerSupplier
    path('customerSupplier/detail/<int:idCS>/', detail_customerSupplier, name='detail_customerSupplier'),
    path('customerSupplier/new/', new_customerSupplier, name='new_customerSupplier'),
]

когда я запускаю тест, я возвращаю эту ошибку:

python manage.py test Проверка системы реестра не выявила проблем (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')) File /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, строка 660, в _reverse_with_prefix поднять NoReverseMatch (msg) django.urls.exceptions.NoReverseMatch: Обратный поиск для поиска не найден. "поиск" не является допустимой функцией просмотра или именем шаблона.

================================================== ==================== FAIL: 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

================================================== ==================== FAIL: test_homepage_template (tests.RegistryTest) ---------------------- ------------------------------------------------ Выслеживать ( последний вызов последним): файл /home/carloc/Projects/100_CogniSpa/gestionale-cogni/src/Registry/tests.py, строка 18, в test_homepage_template self.assertTemplateUsed (ответ, 'registry / search_registry.html') Файл / главная /carloc/.local/lib/python3.7/site-packages/django/test/testcases.py, строка 639, в assertTemplateUsed self.fail (msg_prefix + Нет шаблонов, используемых для отображения ответа) AssertionError: шаблоны для отображения не используются ответ

-------------------------------------------------- -------------------- Выполнено 3 теста за 0,008 с.

ВЫПОЛНЕНО (отказов = 2, ошибок = 1)

Я как бы заблудился ... шаблон находится в приложении по адресу templates / registry / search_registry.html, но по-прежнему говорит, что для ответа не использовался шаблон.

Любая помощь?

большое спасибо.

Карло


person Carlo Cogni    schedule 29.09.2020    source источник
comment
Покажите, пожалуйста, urls.py проекта, где вы используете include(). Обратите внимание, что test_homepage_status не работает, потому что он возвращает 404 вместо 200. Сначала исправьте это, прежде чем беспокоиться о тесте шаблона.   -  person Alasdair    schedule 29.09.2020
comment
Переместите последний return render(...) за пределы блока else - на данный момент представление поиска не возвращает ответ на почтовый запрос, если форма недействительна.   -  person Alasdair    schedule 29.09.2020
comment
from django.contrib import admin from django.urls import include from django.urls import path from django.conf.urls import url from Registry.views import default urlpatterns = [ path('admin/', admin.site.urls), path('Registry/', include('Registry.urls', namespace='registry')), # path('', default), ] Извините, если он не идеально отформатирован   -  person Carlo Cogni    schedule 29.09.2020
comment
вот основной urls.py из проекта forlder. path('Registry/', include('Registry.urls', namespace='registry')),   -  person Carlo Cogni    schedule 29.09.2020
comment
Пожалуйста, отредактируйте свой вопрос и добавьте туда код вместо добавления кода в комментарии.   -  person Alasdair    schedule 29.09.2020
comment
@Alasdair, разве это не должно работать для метода GET? так или иначе, я попытался закомментировать "else:", но все равно потерпел неудачу ....   -  person Carlo Cogni    schedule 29.09.2020
comment
URL-адреса должны иметь косую черту в начале, например self.client.get('/Registry/search/'), или вы можете использовать reverse('registry:search'), как предложил Араккал.   -  person Alasdair    schedule 29.09.2020
comment
Разве это не должно работать для метода GET? - да, изменение этого не повлияет на запрос GET, я просто указал, что это проблема. form = SearchForm() должен по-прежнему находиться в блоке else, поэтому не комментируйте его. Переместите возврат за пределы блока else.   -  person Alasdair    schedule 29.09.2020


Ответы (1)


ОК решено.

Стоит отметить 2 проблемы:

первый: метод client.get () должен быть:

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

и не:

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

эта первая ведущая косая черта важна.

Второй: в моем случае я тестировал с помощью SimpleTestCase, который не позволяет подключаться к базе данных, что требовалось в моем представлении для правильной обработки теста. Поэтому я перешел на class RegistryTest(TestCase): .....

После внесения этих исправлений третий и последний тест (assertTemplateUsed) также прошел тест.

Спасибо, ребята, за подсказку. Это действительно помогло

person Carlo Cogni    schedule 29.09.2020