如何在Wagtail中通过代码创建带StreamField的测试页面?
测试Wagtail带StreamField页面的代码创建方法
我在测试Wagtail页面时,创建无StreamField的页面可以正常工作,代码如下:
blogPage = BlogPage(title="Test Blog",path="test-blog", excerpt=rich_text("<p>This is an excerpt </p>"), body=[{"id": "07a1f0b6-0023-45a3-83a0-38cb6a7893f1", "type": "heading", "value": "test heading"}]) root_page = Page.objects.get(id=2) root_page.add_child(instance=blogPage) root_page.save()
但创建带StreamField(字段名为body)的页面时,运行assertPageIsPreviewable和assertPageIsEditable测试会报错:
AssertionError: Failed to load preview for BlogPage "Test Blog" with mode="": 'body-count'
尝试过的无效方法
我没找到官方文档里关于代码创建带StreamField页面的说明,只查到nested_form_data和streamfield相关内容,试了两种写法都没用:
写法一:
blogPage = BlogPage(title="Test Blog",path="test-blog", excerpt=rich_text("<p>This is an excerpt </p>"), body=nested_form_data({'body': streamfield([('heading', 'test heading'),])}))
写法二:
blogPage = BlogPage(title="Test Blog",path="test-blog", excerpt=rich_text("<p>This is an excerpt </p>"), body=streamfield([('heading', 'test heading'),]))
之后查了Wagtail最新文档,试了两种写法也失败:
写法一:
blogPage = BlogPage(title="Test Blog",path="test-blog", excerpt=rich_text("<p>This is an excerpt </p>")) blogPage.body.extend([('heading', "test heading")]) blogPage.save() root_page = Page.objects.get(id=2) root_page.add_child(instance=blogPage) root_page.save()
写法二:
blogPage = BlogPage(title="Test Blog",path="test-blog", excerpt=rich_text("<p>This is an excerpt </p>")) root_page = Page.objects.get(id=2) root_page.add_child(instance=blogPage) root_page.save() blogPage.body.extend([('heading', "test heading")]) blogPage.save()
我还试了Stack Overflow上的解决方案,同样无效。
当前测试代码
附上我的测试代码:
class BlogTestCase(WagtailPageTestCase): @classmethod def setUpTestData(cls): cls.blogPage = BlogPage(title="Test Blog",path="test-blog", excerpt=rich_text("<p>This is an excerpt </p>")) cls.blogPage.body.extend([('heading', "test heading")]) cls.blogPage.save() root_page = Page.objects.get(id=2) root_page.add_child(instance=cls.blogPage) root_page.save() def test_is_previewable(self): self.assertPageIsPreviewable(self.blogPage) def test_is_editable(self): self.assertPageIsEditable(self.blogPage)
我不想使用fixtures,请问在测试场景下,通过代码创建带StreamField的Wagtail页面的正确方法是什么?
内容的提问来源于stack exchange,提问作者user14665310
相关产品推荐
相关产品推荐

