【问题标题】:Wagtail: How to setup up unittest for simple page edit?Wagtail:如何设置单元测试以进行简单的页面编辑?
【发布时间】:2020-11-06 01:35:58
【问题描述】:

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

# 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

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

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)

捕获的输出:&lt;PageQuerySet [&lt;MyPage: Test Page&gt;]&gt;

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

【问题讨论】:

    标签: python django wagtail


    【解决方案1】:

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

    对于页面模型,系统会定向到 Wagtail 现有的添加和编辑视图,并将您返回到正确的列表页面,以获得无缝体验。

    所以,您看到的是 Modeladmin 正在按设计工作。也许您打算改为针对标准页面编辑视图运行此测试?如果是这样,你想要的 URL 路由是wagtailadmin_pages:edit

    【讨论】:

    • [facepalm] 你说的完全正确,这就是我的意图。当然,它现在可以工作了。
    猜你喜欢
    • 2021-01-09
    • 2013-09-11
    • 1970-01-01
    • 1970-01-01
    • 2015-09-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多