如何测试使用 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)),
]
已修复。唉。
背景
好的,我有一个库 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)),
]
已修复。唉。