如何使用 WP_Mock 和 Mockery 来模拟 $wpdb-> 前缀?

问题描述 投票:0回答:1

🗺️我的环境

PHP 7.4
WordPress 6.2
WP_Mock 1.0
PHP单元 11.6.9
嘲讽 1.6.6

🖥️代码:测试用例

use PHPUnit\Framework\TestCase;
use WP_Mock;
use Mockery;

class WPAB_Database_Service_Test extends TestCase
{
  /**
   * @test
   */
  public function migrate()
  {
    // ... some code ...

    $wpdb_mock = Mockery::mock('WPDB');

    $wpdb_mock
      ->allows('get_charset_collate')
      ->withNoArgs()
      ->andReturn('utf16_general_ci');

    $wpdb_mock->prefix = 'wpbb_';

    $result = $database_service->migrate(); // The function I want test

    $this->assertSame($result, 1);
  }
}

🖥️代码:

database_service->migrate()

的行问题
$prefix = $wpdb->prefix;

🚩问题与期待

运行测试后,我收到以下警告:

PHP Notice:  Undefined property: Mockery_1__WPDB::$prefix in ...

并且当前测试由于未知原因而成功。可能 Mockery 默认返回空字符串🤔(如果有人得到答案)

有谁知道如何使用 WP_Mock 和/或 Mockery 模拟/模拟特定属性(静态和非静态)?

我需要知道避免此类警告的最佳方法。 预先感谢您的宝贵时间❤️

php wordpress unit-testing phpunit mockery
1个回答
0
投票

我只是错过了测试中的下面一行..

global $wpdb;
© www.soinside.com 2019 - 2024. All rights reserved.