私はWordPress用に書かれた簡単なPHP Unitで、テストしたいプラグインからメインの 'init'アクションが呼び出される前に初期化コードが欲しいのです。
class MyPlugin_Test_Example extends WP_UnitTestCase {
public static function setUpBeforeClass()
{
error_log('setUpBeforeClass');
}
...
例えば、私はすでにsetUpBeforeClass
にlogステートメントを入れました、しかしそれはまだ私のプラグインの 'init'アクションの後に呼ばれています。
私のプラグインのinit
アクションがチェックするために何かを必要とすると仮定します、とにかくテストコードにそれを偽造させることは可能ですか?
あなたが発見したのは、テストが実行される前にWordPressがロードされ、そしてすべてのアクションが呼び出されるということです。 WordPressがロードされたときにアクションにフックすることは可能ですが、それはテストケースクラスからではなくあなたのPHPUnitブートストラップファイルから行われなければなりません。私はあなたのブートストラップファイルがどのように見えるかわからないので、私はそれがこのチュートリアルのもの に似たものであると仮定するつもりです 。あなたがする必要がある主なことは、WordPressのPHPUnitヘルパー関数(tests/phpunit/includes/functions.php
)を含むファイルをロードすることです。 tests_add_filter()
関数が含まれているので、そのファイルをインクルードする必要があります。そしてこれがinit
にフックするのに使える関数です。
tests_add_filter( 'init', 'my_function_to_call' );
この関数はadd_filter()
関数またはadd_action()
関数と同じように機能します。 WordPressはまだロードされていないため、add_action()
を使用することはできません。したがって、これらの関数は使用できません。そしてあなたが発見したように、WordPressがあなたの機能を接続するためにロードされるまで待つことはできません。それがtests_add_filter()
関数が存在する理由です:それであなたはそれがテストのためにロードされる前にあなたはWordPressにフックすることができます。