AssertionError: Для отображения ответа не используются шаблоны

Я решил проблему во время написания этого вопроса, но я хотел опубликовать его, так что, возможно, кому-то нужен этот ответ


Здравствуйте мои друзья. Я новичок в тестировании django. Пока я тестирую свои представления, я столкнулся с этой ошибкой в некоторых представлениях.

Это мой views.py:

def all_programs(request):
    programs = Program.objects.all()
    return render(request, 'orders/all_programs.html', {'programs': programs})


def checkout(request, slug):
    if request.method == 'POST':
        # get data from form and save it

    program = get_object_or_404(Program, slug=slug)
    dates = ProgramDate.objects.filter(program=program)
    return render(request, 'orders/checkout.html', {'program': program, 'dates': dates})

Это urls.py:

from django.urls import path
from django.views.generic import RedirectView
from .views import *

app_name = 'orders'

urlpatterns = [
    path('', RedirectView.as_view(url='https://www.another-website.net')),
    path('tests/', all_programs, name='all_programs'),
    path('checkout/<str:slug>/', checkout, name='checkout'),
    path('checkout/return_page/', ReturnPage.as_view(), name='return_page'),
]

А это test_views.py:

from django.test import TestCase
from django.shortcuts import reverse


class TestViews(TestCase):
    
    def test_all_programs(self):
        response = self.client.get(reverse('orders:all_programs'))
        self.assertTemplateUsed(response, 'orders/all_programs.html')

    def test_checkout(self):    # error id here
        response = self.client.get(reverse('orders:all_programs', kwargs={'slug': 'test'}))     # I tried this  
        # response = self.client.get('http://127.0.0.1:8000/checkout/test/')    #and this
        self.assertTemplateUsed(response, 'orders/checkout.html')

Решением в этом случае будет:

Тест в Django не использует базу данных по умолчанию, а создает свою собственную базу данных, в которой нет никаких записей (я совсем забыл об этом), поэтому вы должны создать записи перед началом тестов, которые относятся к базе данных. В этом случае я должен создать новую программу перед тестом:

class TestViews(TestCase):

    _program = {
        'name': 'test_program',
        'price': 1000,
        'abbreviation': 'test',
        'description': 'test_program',
        'slug': 'test_program',
        'id_from_zoho': 1000,
    }


    def test_checkout(self):
        program = Program(**self._program)
        program.save()
        response = self.client.get(reverse('orders:checkout', kwargs={'slug': program.slug}))
        self.assertTemplateUsed(response, 'orders/checkout.html')

Вернуться на верх