web-dev-qa-db-ja.com

単体テストを実行するときに追加のプラグインをインストールしてロードする

プラグインの単体テストを書きたいです。私はWP-CLIを使ってテスト用のWordPressインスタンスを足場にし、テストをうまく実行することができます。

私が単体テストを書いているプラ​​グインは、wordpress.orgリポジトリ向けのスタンドアロンのプラグインではなく、サイト固有のプラグインです。サイト固有のプラグインであるため、いくつかの機能は他のプラグインによって提供される機能を使用します。例えば、Advanced Custom Fieldsです。

質問 :自分のサイト固有のプラグインをテストするときに、WP-CLIスキャフォールドサイト内に追加のプラグインをインストールしてロードする方法を教えてください。

必要なプラグインをインストールしてアクティブにするために追加のwp-cliコマンドを追加できることを期待してbin/install-wp-test.shファイルを調べましたが、このスクリプトはテストWordPressインスタンスを作成するためにwp-cliを使用するようには見えません。

また、_manually_load_pluginファイル内のtests/bootstrap.php関数を次のコードで更新してみましたが、効果はありませんでした。

/**
 * PHPUnit bootstrap file
 *
 * @package Site Specific Plugin
 */

$_tests_dir = getenv( 'WP_TESTS_DIR' );
if ( ! $_tests_dir ) {
    $_tests_dir = '/tmp/wordpress-tests-lib';
}

// Give access to tests_add_filter() function.
require_once $_tests_dir . '/includes/functions.php';


/**
 * Manually load the plugin being tested.
 */
function _manually_load_plugin() {
    require dirname( dirname( __FILE__ ) ) . '/battingforchange.php';
    // Update array with plugins to include ...
    $plugins_to_active = array(
        'advanced-custom-fields-pro/acf.php'
    );
    update_option( 'active_plugins', $plugins_to_active );
}
tests_add_filter( 'muplugins_loaded', '_manually_load_plugin' );

// Start up the WP testing environment.
require $_tests_dir . '/includes/bootstrap.php';
2
Andrew

あなたがやろうとしているのは単体テストではなく統合テストです、そして統合は関連するプラグインに特有の初期化を必要とするので、明白な "プラグインファイルを含める"より一般的な答えを与えることは難しい

ユニットテストのアイディアはあなたのAPIがするべきことを行うかどうかをチェックすることであり、基本的な仮定は外部APIが正しく機能することであるべきです。

外部APIが正しく機能していると仮定すれば、実際にそれらを呼び出したり、単にその振る舞いをまねただけの同じ名前で関数を書いても、何の違いもありません。

アイデアの一例として。私が書いたプラグインには、どの引数WP_Queryを呼び出すのかを制御する設定がいくつかあります。それをテストするために、実際にWP_Queryを呼び出すことに煩わされることなく、結果の引数の配列をチェックするだけです。

1
Mark Kaplun

WP-CLIによって生成されたテスト環境は、 Mark Kaplun で指摘されている統合テスト用ではなく、単一のプラグインを単体テストするように設計されています。

しかし、この投稿を WordPressでのユニットテストのテーマとプラグインに従うことで あなたはより広い統合テストをするためにテーマと追加のプラグインをロードすることができます。

0
Andrew