WP_UnitTestCaseファクトリクラスのドキュメントはどこにありますか?


21

最近のバージョンにWP_UnitTestCase$factoryプロパティが含まれています。

例えば:

$post = $this->factory->post->create();

この便利な機能に関するドキュメントはどこにありますか?

回答:


26

私の知る限り、現時点ではドキュメントはありません。公式のソースはこちらです

また、WordPressプラグインの単体テストに関するチュートリアルも作成しました。このチュートリアルではこの機能について詳しく説明しています

使用する利点の1つは、WP_UnitTestCaseその工場です。これらは、factoryメンバー変数を介してアクセスできます。 factoryで定義されたクラスのいずれかの各インスタンスである特性を有するオブジェクトであるfactory.php /含みます。彼らは何をしますか?テストで必要な場所にユーザー、投稿、用語などを簡単に作成できます。したがって、これを行う代わりに:

$args = array( /* A bunch of user data you had to make up */ );
wp_insert_user( $args );

これを行うことができます:

$user_id = $this->factory->user->create();

しかし、待ってください、さらに良くなります。多くのユーザー(または投稿など)が必要な場合はどうなりますか?次のように一括で作成できます。

$user_ids = $this->factory->user->create_many( 25 );

これにより、テストで使用できる25人のユーザーが作成されます。

factoryは、使用できる次のプロパティがあります。

  • $post
  • $attachment
  • $comment
  • $user
  • $term
  • $category
  • $tag
  • $blog

これらはすべて、$user工場で上記の例で示したのと同じ方法で使用できます。たとえば、次のような投稿を作成できます。

$this->factory->post->create();

オブジェクトの作成に使用する特定の引数を指定することもできます。上記の例では、投稿を作成しましたが、特定のユーザーに割り当てられていません(post_authorフィールドはデフォルトでになります 0)。代わりに、投稿をユーザーに割り当てたい場合があります。このようにします:

$user_id = $this->factory->user->create();
$post_id = $this->factory->post->create( array( 'post_author' => $user_id ) );

また、作成しているオブジェクトのID以外のものが必要な場合は、これを行う必要はありません。

$post_id = $this->factory->post->create();
$post = get_post( $post_id );

代わりに、次のcreate_and_get()メソッドを使用します:

// $post will be an instance of WP_Post 
$post = $this->factory->post->create_and_get();

この例では、postファクトリーを使用しましたが、すべての工場に同じことが当てはまります。

これについては、WordPressのドキュメントチームに言及すると思います。このようなものをプラグインとテーマのハンドブックに入れることができるかもしれません。

更新(2015年6月20日):独自のカスタムファクトリを作成することもできます

更新(2016年9月27日): WordPress 4.4では、テストが更新されfactory()、工場にアクセスするための静的メソッドが提供されましたが、factoryプロパティはまだマジックゲッターを介して提供されます。


ドメインは死んでおり、チュートリアルへのリンクも死んでいます。移動しましたか?
ジョシュハブダス

@JoshH今バックアップされているようです。サイトが深夜(私のタイムゾーン)にバックアップを実行しているときに、おそらくヒットします。
JD

@JoshHテストに手続き型コードを使用する単体テストフレームワークは知りません。手続き型テストフレームワークは、どのように機能する必要があるのか​​という理由だけで、とにかくOOフレームワークとほぼ同じように機能することを本当に疑っています。ただし、PHPUnitのようなオブジェクト指向フレームワークでテストが構築されているという理由だけで、OOコードのみをテストできるとは規定していません。プラグインには多くの手続き型コードがあり、まったく同じ方法でテストします。WordPressはまた、この方法で多くの手続きコードをテストします。それで問題ないはずです。
JD

@JDに感謝します。理想的には、この方法でもテストを書きたいです。ただし、メインコードラインにない場合は、OOPに送信します。PSあなたのブログにコメントを投稿しようとしましたが、エラーが発生しました。squinty顔にかかわらず、411に感謝
ジョシュHabdas

1
@JoshHコメントの問題についてのヘッドアップをありがとう、これは今修正されるべきです。これは、過度のスパム対策プラグインが原因でした。
JD

2

のソースコード

https://github.com/rnagle/wordpress-unit-tests/blob/master/includes/factory.php

現時点で見るのに最適な場所のようです


2
質問からリンクを削除するだけです:あなたは何を読みますか?常に外部ソースに依存しない回答を書いてください。それ以外の場合は、回答を削除する必要があります。
カイザー14年

2
@kaiser、あなたがどこから来たのかはわかりますが、私の質問への答えはリンクになります。誰かがここにドキュメント全体を投稿することを期待しないでしょうか?
djb

2
はい、誰かが関連するすべてのコードをここに投稿することを期待します。 これは、サイトのFAQにも記載されています。「ターゲットサイトに到達できないか、完全にオフラインになった場合に備えて、重要なリンクの最も関連性の高い部分を常に引用してください。」それはリンクされたリソースのコンテンツ全体ではないかもしれませんが、この場合はそうかもしれません。そのまま、そのGitHubリソースにアクセスできなくなると、この答えは無意味になります。
s_ha_dum 14年
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.