如何测试使用 Wagtail Hooks 注册的端点?

How do I test endpoints registered with Wagtail Hooks?

背景

好的,我有一个库 wagtail_references which, like many snippet libraries, uses wagtail hooks 可以将管理员视图添加到 wagtail 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 被 wagtail 挂钩注册的端点?

我试过了

在测试用例中手动注册钩子,如:

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

卫生部!我没有在我的测试应用程序中注册管理网址。

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)),
]

已修复。唉。