如何在调用init钩子之前在单元测试中初始化一些东西?

时间:2014-10-01 作者:Yoga

我为WordPress编写了一个简单的PHP单元,希望在从要测试的插件调用主“init”操作之前初始化代码,例如。

class MyPlugin_Test_Example extends WP_UnitTestCase {

    public static function setUpBeforeClass()
    {

        error_log(\'setUpBeforeClass\');

    }
...
例如,我在setUpBeforeClass 已经有了,但在我的插件的“init”操作之后仍在调用它。

假设我的插件init 操作需要一些检查,是否可以让我测试代码伪造?

1 个回复
SO网友:J.D.

您发现WordPress已加载,并且在测试运行之前调用了所有操作。加载WordPress时可以钩住一个操作,但必须从PHPUnit引导文件而不是从testcase类中完成。我不知道你的引导文件是什么样子的,所以我假设它类似于the one in this tutorial. 您需要做的主要事情是加载包含WordPress的PHPUnit助手函数的文件(tests/phpunit/includes/functions.php). 您需要包括该文件,因为它包含tests_add_filter() 作用这就是你可以用来连接的函数init, 像这样:

tests_add_filter( \'init\', \'my_function_to_call\' );

该函数的工作原理与add_filter()add_action() 功能。您不能使用add_action() 但是,由于WordPress尚未加载,因此这些函数不可用。正如您所发现的,您不能等到WordPress加载后再连接您的函数,因为那样就太晚了。这就是为什么tests_add_filter() 函数存在:因此您可以在加载WordPress进行测试之前将其挂接到WordPress。

结束