私は自分のプラグインでいくつかのメソッドをテストしたいのですが、そのうちのいくつかはユーザーがログインすることを要求しました。
私はいたるところを捜したが何の役にも立たなかった。
ユーザーからログインしたセッショントークンを取り込むメソッドをテストする必要があります。そのためには、ログに記録されたユーザーをモックしてからwp_get_session_token
を使用して彼のトークンを取得する必要があります。
しかし、その方法がわかりません。
<?php
class Test_Class extends WP_UnitTestCase {
/**
* Checks the error for invalid user token
*
* @since 1.1.0
*/
public function test_add_app() {
$user = $this->factory->user->create();
wp_set_current_user( 1 );
$auth_token = wp_get_session_token();
$auth_cookie = wp_parse_auth_cookie();
// I'm checking for validity here but the token seems to be empty
// so the test fails every time.
}
}
WP_UnitTestCase
で提供されているファクトリでデータをモックできると読んだことがありますが、何が悪いのかわからないです。
ほんの少しのメモ:
単体テストではなく、機能/統合テストを行っているようです。
ここではユーザーを作成していますが、現在のユーザーとして設定していません。
$user = $this->factory->user->create();
wp_set_current_user( 1 );
あなたはおそらく欲しい:
$user_id = $this->factory->user->create();
wp_set_current_user( $user_id );
次の理由により、Cookieはここで設定されていません。
tests_add_filter( 'send_auth_cookies', '__return_false' );
あなたが使用する場合.
add_filter( 'send_auth_cookies', '__return_true' );
setcookie()
がwp_set_auth_cookie()
から呼び出されるとエラーになります。
Cannot modify header information - headers already sent by (
wp_get_session_token()
はwp_parse_auth_cookie()
のラッパーです。
wp_parse_auth_cookie
でクッキーを解析することは、$_COOKIE
が設定されていることを前提としています。
偽のトークン文字列があなたのテストでうまくいくだろうか?
そうでなければ、試すことができます:
$expiration = time() + DAY_IN_SECONDS;
$manager = WP_Session_Tokens::get_instance( $user_id );
$token = $manager->create( $expiration );
検証あり
$this->manager->verify( $token );
その後、クリーンアップ:
$this->manager->destroy( $token );