Wagtail:如何为简单的页面编辑设置单元测试?

Wagtail: How to setup up unittest for simple page edit?

我正在尝试使用 django-pytestwagtail_factories 在 Wagtail 中设置一个简单的测试来测试用户编辑 Pages 他们拥有的。但是当我尝试获取编辑 url 时,我一直在重定向。 (对于我这里的示例,我使用超级用户装置来不必处理权限。)

# test_views.py

def test_user_can_edit_owned_pages(client, superuser):
    parent_page = MyPageIndexPageFactory()
    my_page = MyPageFactory(owner=superuser, parent=parent_page)

    edit_url = reverse("register_mypage_modeladmin_edit", args=[my_page.pk])

    client.force_login(superuser)
    response = client.get(edit_url)
    
    # to capture in pytests output  
    print(
        superuser.is_superuser, 
        my_page.id, 
        response
    )    

    assert response.status_code == 200

尽管捕获的输出显示 Page get 是使用 url 中的正确 ID 创建的,但 assert 失败了——但我仍然在重定向。

True 4778 <HttpResponseRedirect status_code=302, "text/html; charset=utf-8", url="/admin/pages/4778/edit/?next=/admin/my_app/mypage/">

当我获得模型列表视图的索引 url 时,一切都很好。

    [...]
    index_url = reverse("register_mypage_modeladmin_index")
    response = client.get(index_url)
    qs = response.context[0]["object_list"]
    print(qs)

捕获的输出:<PageQuerySet [<MyPage: Test Page>]>

我怀疑这(仍然)是权限问题,即使我使用的是 superuser。如何在 Wagtail 中设置像这样的简单测试?

您正在访问的 URL 路由 (register_mypage_modeladmin_edit) 是 modeladmin 模块的一部分,它确实 redirect to the standard page edit view when you use it on a page model:

For Page models, the system directs to Wagtail’s existing add and edit views, and returns you back to the correct list page, for a seamless experience.

因此,您看到的是 Modeladmin 按设计工作。也许您打算 运行 针对标准页面编辑视图进行此测试?如果是这样,您想要的 URL 路线是 wagtailadmin_pages:edit.