it-swarm-ja.com

プラグインを単体テストするとき、プラグインはWordPressテストインストールのwp-content/pluginsディレクトリにある必要がありますか?

私は現在プラグインの単体テストを設定しています。私のテスト/ phpunit/bootstrap.phpファイルで私は持っています:

require_once $wp_tests_dir . '/includes/functions.php';

    tests_add_filter( 'muplugins_loaded', function() {
        require /can/this/be/anywhere/on/my/filesystem/myplugin/myplugin.php
    } );

// Start up the WP testing environment
require_once $wp_tests_dir . '/includes/bootstrap.php';

ご覧のとおり、WPテスト環境を起動する前に、プラグインのメインファイルをmuplugins_loadedにフックされた関数内に配置する必要があります。

私の質問

Myplugin/myplugin.phpはWordPressテストインストールのwp-content/pluginsディレクトリにある必要がありますか、それとも私のファイルシステムのどこかにありますか?

6
henrywright

TL; DR

canはファイルシステムのどこにでも置くことができます。

(ただし、これをさらに現実的に行うのに役立つツールについては、以下の更新を参照してください。)

説明

プラグインにインストール機能があるかどうか、およびそれを実行する方法に応じて、プラグインはファイルシステムのどこにでも配置できます。

プラグインがデータベーステーブルを作成するか、アクティベーション時にデータベースにデフォルトオプションを保存する場合、そのようなプラグインをロードするだけではプラグインがインストールされないため、プラグインはおそらく正しく動作しません。そのため、プラグインのロードに加えて、プラグインもインストールする必要があります。

WordPressがこれを行う方法は、activate_plugin()関数を使用することです。この関数は、register_activation_hook()で登録されたプラグインのアクティベーションフックを呼び出します。

ただし、activate_plugin()はプラグインがwp-content/pluginsフォルダーに存在することを検証するため、そのようにプラグインをインストールする場合は、実際にプラグインディレクトリにプラグイン(またはプラグインへのシンボリックリンク)が必要です。

これは苦痛なので、通常はプラグインのインストールにactivate_plugin()を使用しません。代わりに、register_activation_hook()で登録した関数を直接呼び出します。これは理想的ではないかもしれませんが、私はそれから意図しない副作用を経験していません。

したがって、次のようなものになります。

tests_add_filter( 'muplugins_loaded', function() {
    require '/path/to/plugin/anywhere/on/filesystem/myplugin/myplugin.php'

    my_plugin_install_function();
} );

もちろん、プラグインにインストール機能がない場合、この点は重要ではありません。おそらく、プラグインをアクティブ化/インストールすることをまったく心配する必要はありません。ファイルシステムのどこからでもロードするだけで、テストは正常に機能するはずです。

WebDriverテスト

プラグインの受け入れテストを実行したい場合(おそらくshould)が来るかもしれないことに注意してください。これを行う方法に応じて、WebDriverブラウザーがアクセスしているサイトでプラグインを実際にアクティブにする必要があります。

WP Browser は、Codeceptionを介してPHPUnitでこれを行うためのいくつかのオプションを提供します。現在提供されているオプションはどれも、クライアント/リモート側に加えてテスト側で実際にプラグインをロードしないため、WebDriverテストで使用されているサイトは単体テストで使用されているサイトから完全に切り離されています。 (ただし、私は現在 ハイブリッドアプローチで作業中 同じサイトを使用し、WebDriverテストの実行中にテスト側でロードします。)

2016年11月更新

上記のことはすべて真実であり、この方法でプラグインをロードしても問題はありませんが、最近、ユニットテスト中にプラグインをロードおよびインストールする方法について、より現実的なものを追求することにしました。このため、 WPPPB またはWordPressプラグインPHPUnit Bootstrapと呼ばれる小さなライブラリを作成しました。使用する場合、プラグインのロードは次のように簡単です。

$loader = WPPPB_Loader::instance();
$loader->add_plugin( 'my-plugin/my-plugin.php' );
$loader->load_wordpress();

WordPressがロードされる前に、プラグインがリモートでリモートでアクティブ化されるため、これは一見シンプルです。通常の「実際の」場合とまったく同じようにWordPressによってロードされます。これには、プラグインフォルダー内のプラグインへのシンボリックリンクが必要ですが、ライブラリには、すべてを自動的に設定するスクリプトが含まれています。 (プロのヒント:WPPPBには、プラグインのアンインストール/インストールを非常に現実的にテストするのに役立つツールも含まれています。)

6
J.D.