如何在单元测试中设置用户

时间:2018-04-13 作者:dingo_d

我想测试插件中的一些方法,其中一些方法需要用户登录。

我到处找,但没找到有用的东西。

我需要测试一个从用户处接收登录会话令牌的方法。为此,我需要模拟登录的用户,然后使用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, 但我不确定我做错了什么。

1 个回复
SO网友:birgire

只有几条注释:

看起来您正在进行功能/集成测试,而不是单独进行单元测试。

此处您正在创建一个用户,但未将其设置为当前用户:

$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 (
Thewp_get_session_token() 是的包装wp_parse_auth_cookie().

使用解析cookiewp_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 );

结束

相关推荐