【问题标题】:Testing Wagtail page views using client.get使用 client.get 测试 Wagtail 页面视图
【发布时间】:2017-03-07 13:35:06
【问题描述】:

我想为使用 RoutablePageMixin 的 Wagtail 页面测试我的视图功能。我发现 Wagtail 包含一些 testing functionality,但我正在尝试检查不同 url 上的内容。尽管 Wagtail 测试功能有效,但使用 self.client.get 进行测试不起作用——我得到 404 响应。我正在尝试以下测试:

def test_subpage(self):
    response = self.client.get(
        self.page.full_url + self.page.reverse_subpage('subpage')
    )
    self.assertEqual(response.status_code, 200,
                     'Request the open positions page')

我认为错误在于页面的创建方式。我使用了几种方法,但找不到一种适用的方法。我发现创建页面最直观的方法如下:

def setUp(self):
    self.login()
    parent = Page.get_root_nodes()[0] # Home

    self.assertCanCreate(parent, MyPage, {
        'title': 'Title!',
        'title_sv': 'Title2!',
        'slug': 'test',
        'published': datetime.datetime.now(),
    })

    self.page = MyPage.objects.get(slug='apply')

这些子页面已经过手动测试,看起来确实有效。

【问题讨论】:

    标签: django unit-testing testing wagtail


    【解决方案1】:

    在测试代码(或任何其他代码...)中创建页面的最简单方法是:

    parent = Page.objects.get(url_path='/home/')
    page = MyPage(title='Title!', slug='test', body='...')
    parent.add_child(instance=page)
    

    请注意,Page.get_root_nodes()[0] 不会返回您的站点主页 - 树根是不可编辑的占位符,站点主页通常是它的子级。您可以创建根的其他子项,但除非您为它们提供相应的站点记录,否则它们将无法通过任何 URL 访问(这可能是您在测试中得到 404 的原因) .

    【讨论】:

    • hm,这并不能真正解决self.client.get 为不在 urls.py 中的任何 URL 产生 404 的问题。例如,如果一个页面 @route def 根据路由有效性可能导致 400 或 302 响应,则此解决方案不会让您验证 response.status_code 是它应该是的。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-03-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-07-02
    相关资源
    最近更新 更多