web-dev-qa-db-ja.com

PHPUnitテストWordPressプラグイン

このサイトや他のリソースからの回答を使って、私はPHPUnitテストとWordPressテスト環境を使って次のプラグインを書き始めました。私のプラグインのbootstrap.phpの中にあるものを蒸留して:

define( 'WP_TESTS_DIR', 'pathToMyWordPressTestsFromSVN');
define( 'TEST_PLUGIN_FILE', 'pathToMyPlugin/myPlugin.php' );
require_once WP_TESTS_DIR . 'includes/functions.php';
require WP_TESTS_DIR . 'includes/bootstrap.php';

function _manually_load_plugin() {
    require TEST_PLUGIN_FILE;
    if(is_plugin_active(TEST_PLUGIN_FILE)){
        echo "PLUGIN IS LOADED AND WORKING!!!!";
    }
}
tests_add_filter( 'muplugins_loaded', '_manually_load_plugin' );

// Normally you'd find "require WP_TESTS_DIR . 'includes/bootstrap.php';" down here...

基本的にすべての例で、WordPressテスト環境bootstrap.phpが最後にロードされます。

先にロードした場合、他を必要とするプラグインをテストするときに役立つと思われるis_plugin_activeなどの機能にアクセスできるので、これは奇妙に思えます。

テスト環境が最後にブートストラップされる理由はありますか?習慣/慣習以外に?

5

WordPressテストブートストラップが最後にロードされるのは、正確に WordPressをロードするからです

// Load WordPress
require_once ABSPATH . '/wp-settings.php';

ブートストラップを含めてプラグインを'muplugins_loaded' before にロードする関数をフックしないと、プラグインはWordPressでロードされません。ほとんどの場合、それはあなたのプラグインが正しく設定されないことを意味します(例えば、あなたのプラグインの機能が接続される前に'init'は既に起動されているでしょう)。

依存関係をチェックする限り、おそらく'plugins_loaded'アクションにフックすることでそれを行うことができます。

function _check_for_dependencies() {
    if ( ! is_plugin_active( 'some-plugin/some-plugin.php' ) ) {
        exit( 'Some Plugin must be active to run the tests.' . PHP_EOL );
    }
}
tests_add_filter( 'plugins_loaded', '_check_for_dependencies' );

あるいは、WordPressのブートストラップを完全にロードさせ、その後に依存関係をチェックすることもできます。

8
J.D.