どのようにしてPHPUnitとWordPressテストフレームワークを使ってループ内にいるかをシミュレートするユニットテストを作成しますか?たとえば、ループ内でしか呼び出せないような関数をテストしたいのですが、ポストクエリがメインクエリに対して適切に設定されていると想定しているため、その単体テストを作成するにはどうすればよいでしょうか。
WP_UnitTestCaseを使用していると仮定して、テストクラス内でこれを試してください。
private $post_id;
// use the factory to create a post with some fake data
public function setUp() {
parent::setUp();
$this->post_id = $this->factory()->post->create(
array ( 'post_content' => 'Here are some words. <img src="image.jpg"> <!--more--> And here are some more' )
);
}
public function test_a_thing() {
// fake going to the URL
$this->go_to( get_permalink( $this->post_id ) );
// make sure your relevant globals are set
global $post;
setup_postdata($post);
// profit
$yourthing->function_you_test();
}
その鍵は、拡張すべきgo_to
クラスのWP_UnitTestCase
メソッドです。これは、ワードプレスルート(IIRC)に対するURLの解析をシミュレートします。最初に投稿やその他の情報を設定してからgo_to
を呼び出してループをトリガーする必要があるかもしれません。
Wordpressの単体テストプラグイン機能は非常に困難です。通常、受け入れテストまたは機能テストを実行するほうが簡単です。違いは、単体テストでは、対話するものすべてをモックする必要があることです。機能テストでは、システム全体を実行できます。たとえば、私はCodeceptionを使ってブラウザを起動し、システム全体をテストします。意見はさまざまですが、私はWPプラグインの単体テストの概念全体が難しいと思います。プラグインは真空中には存在しません。それは他のシステムと相互作用するシステムです。分離しようとしても試してみることのポイントは何ですか?ところで - ほとんどの開発者は実際にこの方法でテストしていません。フレームワークをテストするWPの状態はSORRYです。