Как проверить конечные точки, зарегистрированные в Wagtail Hooks? - PullRequest
0 голосов
/ 17 мая 2019

Фон

ОК, у меня есть библиотека wagtail_references , которая, как и многие библиотеки сниппетов, использует крючки трясогузки для добавления представлений администратора в CMS трясогузки.

Скажи, что у меня есть wagtail_hooks.py

@hooks.register('register_admin_urls')
def register_admin_urls():
    return [
        url(r'^references/', include(admin_urls, namespace='wagtailreferences')),
    ]

И регистрируемые просмотры находятся в views/reference.py:

@permission_checker.require('add')
def add(request):
    Reference = get_reference_model()
    ReferenceForm = get_reference_form(Reference)

    if request.method == 'POST':
        # STUFF I WANT TO TEST BECAUSE IT DOESN'T WORK PROPERLY
    else:
        form = ReferenceForm(user=request.user)

    return render(request, "wagtail_references/references/add.html", {'form': form})

Так в моем файле test_stuff.pyЯ бы получил:

class TestReferenceIndexView(TestCase, WagtailTestUtils):

    def setUp(self):
        self.login()

    def post(self, params=None):
        params = params if params else {}
        return self.client.post(reverse('wagtailreferences:add'), params)

    def test_simple(self):
        response = self.post()
        self.assertEqual(response.status_code, 201)

Проблема

Но test_simple не удается, потому что, конечно, URL-адреса для представления, которое тестируется, динамически подключаются, а не определяются в urls.py,Я получаю:

django.urls.exceptions.NoReverseMatch: 'wagtailreferences' is not a registered namespace

Вопрос

Как я могу проверить конечные точки, URL-адреса которых зарегистрированы с помощью трясогузки?

Я пробовал

Регистрациякрючки вручную в тестовом примере, например:

class TestReferenceIndexView(TestCase, WagtailTestUtils):
    def setUp(self):
        self.register_hook('register_admin_urls', register_admin_urls)

1 Ответ

1 голос
/ 17 мая 2019

DOH! Я не зарегистрировал URL-адреса администратора в моем тестовом приложении.

tests/urls.py выглядело так:

from django.conf.urls import include, url
from wagtail.core import urls as wagtail_urls
urlpatterns = [
    url(r'', include(wagtail_urls)),
]

Но теперь выглядит так:

from django.conf.urls import include, url
from wagtail.admin import urls as wagtailadmin_urls
from wagtail.core import urls as wagtail_urls
urlpatterns = [
    url(r'^admin/', include(wagtailadmin_urls)),
    url(r'', include(wagtail_urls)),
]

Исправлено. Вздох.

...