如何使用StaticLiveServerTestCase套件以编程方式为测试设置Wagtail根页面

如何使用StaticLiveServerTestCase套件以编程方式为测试设置Wagtail根页面,wagtail,Wagtail,这个问题类似于 我正在为我的wagtail站点添加测试。下面是我手头的代码库示例: class ExampleTest(StaticLiveServerTestCase): def setUp(self): self.browser = webdriver.Chrome() def test_example_test(self): self.assertContains("Contact Page", self.browser

这个问题类似于

我正在为我的wagtail站点添加测试。下面是我手头的代码库示例:

class ExampleTest(StaticLiveServerTestCase):
    def setUp(self):
        self.browser = webdriver.Chrome()

    def test_example_test(self):
        self.assertContains("Contact Page", self.browser.content)
    [...]
因此,当我使用
python manage.py test
运行此测试时,测试失败,因为我发现有500个错误请记住,我使用的是wagtail,而不仅仅是香草Django。我还使用Django的站点框架,而不是Wagtail的站点框架,因为allauth只允许使用Django的站点框架。

@override\u设置(DEBUG=True)
应用于测试后,如下所示:

@override_settings(DEBUG=True)
class ExampleTest(StaticLiveServerTestCase):
        def setUp(self):
            self.browser = webdriver.Chrome()
    
        def test_example_test(self):
            self.assertContains("Contact Page", self.browser.content)
        [...]
测试仍然失败,因为正在加载的页面是wagtail默认页面

我的问题是,如何设置另一个页面作为根/默认wagtail页面,以便在向主页(即localhost:8000[或测试服务器提供的任何其他端口号]发出请求时(即http://localhost:8000/),我看到的是新页面而不是摇尾默认页面


谢谢。

由于
StaticLiveServerTestCase
创建了一个新的[临时的]“测试”数据库[包括运行
migrations
migrate
],wagtail会在初始
wagtail启动[mysite]
命令后将所有站点和页面重置回初始状态

这意味着,如果您有任何其他
页面
希望成为根页面,则必须对指令进行硬编码才能做到这一点

以下是实现这一目标的方法。 建议在类的
setUpClass
方法中设置这些指令-通常是
class Main()
类,其他测试类可以从该类继承;从而鼓励D.R.Y

class Main(StaticLiveServerTestCase):
    @classmethod
    def setUpClass(cls):
        super(Main, cls).setUpClass()
        cls.root = Page.objects.get(id=1).specific
        cls.new_default_home_page = Index(
            title="New Home Page Index",
            slug="index",
        )
        cls.root.add_child(instance=cls.new_default_home_page)
        cls.site = Site.objects.get(id=1)
        cls.site.root_page = cls.new_default_home_page
        cls.site.save()
        cls.browser = Chrome()
现在,我的测试类(无论它们在哪里)可以从这个类继承并立即获得整个新主页设置。例如:

# ExampleTest() inherits from Main() for ease of Wagtail Page setup: avoiding repetition of setUpClass().
class ExampleTest(Main):
    def test_example_test(self):
        self.assertContains("Contact Page", self.browser.title)
    [...]
希望有一天这能帮助别人。 此解决方案适用于:
wagtail==2.7.4
此版本以上的任何内容都不能保证按照wagtail的代码库要求工作。然而,这不太可能不起作用