web-dev-qa-db-ja.com

Initフックが呼び出される前にユニットテストで何かを初期化するにはどうすればいいですか?

私はWordPress用に書かれた簡単なPHP Unitで、テストしたいプラグインからメインの 'init'アクションが呼び出される前に初期化コードが欲しいのです。

class MyPlugin_Test_Example extends WP_UnitTestCase {

    public static function setUpBeforeClass()
    {

        error_log('setUpBeforeClass');

    }
...

例えば、私はすでにsetUpBeforeClassにlogステートメントを入れました、しかしそれはまだ私のプラグインの 'init'アクションの後に呼ばれています。

私のプラグインのinitアクションがチェックするために何かを必要とすると仮定します、とにかくテストコードにそれを偽造させることは可能ですか?

1
Yoga

あなたが発見したのは、テストが実行される前に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にフックすることができます。

2
J.D.