PHPUnit を使用して WordPress をテストするための関数/フィルターなどの戻り値をモックします。
非常に古い公式の WordPress 単体テストでは常にカスタム プロジェクトに多くの手作業が必要であり、他のテスト フレームワークは WordPress を徹底的に嘲笑しようとしているため、WordPress でテストを書くのは面倒です。解決策は、優れた統合テスト パッケージを用意することです。
全体としての目標は、(私とあなたにとって)シンプルで無駄な時間を無駄にしないことです。
ダウンロードまたはそのまま
composer install --dev pretzlaw/wp-integration-test
PHP と WordPress 以外には、それほど多くは必要ありません (詳細については Packagist.org を参照してください)。
スクラッチから開始し、まだブートストラップを行っていない場合は、次のようにブートストラップを使用できます。
< phpunit bootstrap = " vendor/Pretzlaw/WPInt/bootstrap.php " >
< testsuites >
< testsuite name = " default " >
<!-- CHANGE THIS TO WHERE YOUR PHPUNIT TEST CLASSES ARE -->
< directory >lib/tests</ directory >
</ testsuite >
</ testsuites >
</ phpunit >
この bootstrap.php の使用は必須ではありません。 CLI や管理機能もテストする必要がある場合は、カスタム ブートストラップ ファイルを自由に作成してください。
PHPUnit をすでに知っている場合、アサーションとモックは新しいものではないはずです。 WPInt を使用すると、次の 1 つの特性を追加することで、ほとんどの PHPUnit テストに使用できます。
class FooTest extends PHPUnit Framework TestCase {
use Pretzlaw WPInt Traits WordPressTests;
function testBar () {
// Assertions (simple or with special constraints)
static :: assertActionHasCallback ( ' init ' , ' my_own_init ' );
static :: assertShortcodeHasCallback (
[ new IsInstanceOf ( MyOwn::class ), ' some_method ' ],
' my_shortcode '
);
// Mock posts or meta-data
$ this -> mockGetPost ( 1337 )-> andReturn ( / * your wp post mock */ );
$ this -> mockPostMeta ( ' some_key ' )-> andReturn ( ' Some value! ' ); // For all posts
$ this -> mockMetaData ( ' my-own-cpt ' , ' another_key ' , 1337 )-> andReturn ( ' ec ' ); // Just for ID 1337
// Mock actions, filter, cache, ...
$ this -> mockFilter ( ' user_has_cap ' )
-> andReturn ( true );
$ this -> mockCache ()
-> shouldReceive ( ' get ' )
-> with ( ' my_own_cache ' )
-> andReturn ( ' yeah ' );
// Or use one of several shortcuts and helper
$ this -> disableWpDie ();
}
}
上で見られるように、私たちは mockery/mockery:~1 を使用しています。これは使用と保守が簡単ですが、異なるメソッド名を使用します (例: 上記のshouldReceive
、 andReturn
)。
wp_die()
無効にする追加機能をリクエストしたり、問題を開いてより一般的なショートカットを指摘したりしてください。
Copyright 2021 Pretzlaw (rmp-up.de)
本ソフトウェアおよび関連ドキュメント ファイル (以下「ソフトウェア」) のコピーを入手した人には、使用、コピー、変更、マージする権利を含むがこれらに限定されない、制限なくソフトウェアを取り扱う許可が、ここに無償で与えられます。 、以下の条件を条件として、本ソフトウェアのコピーを出版、配布、サブライセンス、および/または販売すること、および本ソフトウェアが提供される人物にそれを許可すること。
上記の著作権表示およびこの許可通知は、ソフトウェアのすべてのコピーまたは主要部分に含まれるものとします。
ソフトウェアは「現状のまま」提供され、明示的か黙示的かを問わず、商品性、特定目的への適合性、および非侵害の保証を含むがこれらに限定されない、いかなる種類の保証も行われません。いかなる場合においても、作者または著作権所有者は、契約行為、不法行為、またはその他の行為であるかどうかにかかわらず、ソフトウェアまたはソフトウェアの使用またはその他の取引に起因または関連して生じる、いかなる請求、損害、またはその他の責任に対しても責任を負わないものとします。ソフトウェア。