最合适的回答,由SO网友:J.D. 整理而成
基本上有三种选择:
动态加载带有管理端代码的文件setUp()
或setUpBeforeClass()
, 因此,当这些测试运行时,它将被加载在加载和运行测试套件之前加载该文件,如bootstrap.php
文件或其他文件,因此将为所有测试加载它将您的测试分为几个不同的测试套件,有些测试套件就像is_admin()
, 还有一些没有。(或者,始终像这样运行测试is_admin()
, 与您使用插件的建议类似。)在这三个插件中,我在测试插件时已经完成了前两个#2确实是最简单的,因为您只需加载该文件一次,然后就忘记了它,所以您不必确保与该文件中的代码相关的每个测试用例都包含在setUpBeforeClass()
.
#1和#2的唯一缺点是,它们绕过了插件的逻辑,而插件的逻辑通常决定何时加载此代码。因此,在测试中,您测试的是该文件中的代码,但您没有测试插件是否正确加载了该文件。
如果我们讨论的是单元测试,这是可以的。单元测试是关于测试代码的各个单元,比如该文件中包含的每个函数的每个不同方面。它们并不是要确保你的插件作为一个整体正常运行。由于您使用的是Codeception,因此除了单元测试之外,还可以运行功能测试和验收测试。在功能和验收测试中,您将测试插件作为一个整体是否正常运行,其中包括(间接)测试管理端代码是否加载到管理中。
所以,我只需将文件加载到setUpBeforeClass()
或在中bootstrap.php
诸如此类,在我的单元测试中不用担心这一点。在验收测试中,当您通过浏览器测试插件在WordPress仪表板中的实际操作方式时,您将测试是否在应该加载的时候加载了管理端代码。
也许可以为单元测试执行#3,但基本上您的验收测试已经在这样做了:当您让浏览器访问管理员中插件的UI进行测试时,如果管理员端代码没有在应该加载的时候加载,您的测试将失败。