Ошибка при развороте url с несколькими аргументами - Django

Я пишу тест для url, проблема в том, что он не работает, когда я пытаюсь передать несколько аргументов, вот некоторый код:

#test_urls.py
from django.test import SimpleTestCase
from django.urls import reverse, resolve
from cardiotesting.views import *

class TestUrls(SimpleTestCase):
    def test_new_cardio(id_patient, protocol):
        id_patient = '05'
        protocol = 'fox'
        url = reverse('new_cardio_testing', args=[id_patient, protocol])
        print(resolve(url))
#urls.py
from django.urls import path
from . import views

urlpatterns = [
    path('new/<str:id_patient>', views.new_cardio_testing, name='new_cardio_testing'),
]
#views.py
def new_cardio_testing(id_patient, protocol):
    pass

Когда я запускаю тест, он возвращает:

.E
======================================================================
ERROR: test_new_cardio_testing (cardiotesting.tests.test_urls.TestUrls)
----------------------------------------------------------------------
TypeError: TestUrls.test_new_cardio_testing() missing 1 required positional argument: 'protocol'

Но когда есть только один аргумент, тест проходит успешно. Буду признателен за любую помощь.

Ваши url-шаблоны, похоже, не приспособлены для работы в этом формате. Попробуйте следующее:

urlpatterns = [
    path('new/<str:id_patient>/<str:protocol>/', views.new_cardio_testing, name='new_cardio_testing'),
    # Django loves it's trailing slashes.
]

методы тестов принимают только один параметр, и это self, поэтому ваш класс тестов должен быть примерно таким:

class TestUrls(SimpleTestCase):
    def test_new_cardio(self):
        id_patient = '05'
        protocol = 'fox'
        url = reverse('new_cardio_testing', args=[id_patient, protocol])
        print(resolve(url))
Вернуться на верх