Wie initialisiert man etwas im Komponententest vor dem Aufruf des Init-Hooks?

Ich habe eine einfache PHP-Unit für WordPress geschrieben und möchte den Code initialisieren, bevor die Haupt-Init-Aktion von dem Plugin aufgerufen wird, das ich testen möchte, z

class MyPlugin_Test_Example extends WP_UnitTestCase { public static function setUpBeforeClass() { error_log('setUpBeforeClass'); } ... 

Zum Beispiel habe ich bereits eine Log-statement in die setUpBeforeClass , aber sie wird immer noch nach der “init” -Aktion meines Plugins aufgerufen.

Angenommen, die init Aktion meines Plugins benötigt etwas, das überprüft werden kann. Ist es möglich, dass ich den Code trotzdem gefälscht testen kann?

Solutions Collecting From Web of "Wie initialisiert man etwas im Komponententest vor dem Aufruf des Init-Hooks?"

Was Sie entdeckt haben, ist, dass WordPress geladen ist und alle Aktionen aufgerufen werden, bevor die Tests ausgeführt werden. Es ist möglich, sich in eine Aktion einzubinden, wenn WordPress geladen wird, aber es muss von Ihrer PHPUnit-Bootstrap-Datei statt von der Testfall-class ausgeführt werden. Ich weiß nicht, wie Ihre Bootstrap-Datei aussieht, also gehe ich davon aus, dass es sich um etwas Ähnliches handelt wie in diesem Tutorial . Das Wichtigste, was Sie tun müssen, ist das Laden der WordPress PHPUnit tests/phpunit/includes/functions.php ( tests/phpunit/includes/functions.php ). Sie müssen diese Datei einschließen, da sie die function tests_add_filter() enthält. Und das ist die function, mit der Sie in init können:

tests_add_filter( 'init', 'my_function_to_call' );

Die function funktioniert genauso wie die functionen add_filter() oder add_action() . Sie können add_action() jedoch nicht verwenden, da WordPress noch nicht geladen wurde und daher diese functionen nicht verfügbar sind. Und wie du herausgefunden hast, kannst du nicht warten, bis WordPress geladen ist, um deine function zu verbinden, denn dann wird es zu spät sein. Deshalb gibt es die function tests_add_filter() : Sie können sich also in WordPress tests_add_filter() bevor es für die Tests geladen wird.