web-dev-qa-db-ja.com

プラグインオプションを使ったワードプレスプラグインのユニットテスト

私はWordpressの単体テストで新しいです。 PHP Unitと Wordpressのテスト を使用して単体テスト環境を設定できましたが、プラグインオプションにアクセスできないプラグインで設定します。

class nrw_pg{

  private $Twitter_id;

  public function __construct(){
    $options = get_option('nrw_pg_options');
    $this->Twitter_id = (!empty($options['nrw_pg_options_Twitter_id'])) ? $options['nrw_pg_options_Twitter_id'] : '';

  }

  public function get_tweets(){
     $result = null;
     $protocol = is_SSL() ? 'https://' : 'http://';
     $result = wp_remote_get($this->protocol . "api.Twitter.com/1/statuses/user_timeline.json?screen_name=". $this->Twitter_id."&count=11&exclude_replies=true");

     return $result;
   }
}

$GLOBALS['nrw_pg'] = new nrw_pg();

ブラウザからアクセスするとすべてうまくいきます。しかし、ユニットテストでは、私が設定したオプションについての知識があるようには見えません。

require_once('D:\web_files\tester\wordpress\wp-content\plugins\nrw_pg\nrw_pg.php');

class Nrw_Pg_Test extends WP_UnitTestCase {
    public $plugin_slug = 'nrw_pg';
    public $options;

    public function setUp() {
        parent::setUp();

        $this->nrw_pg = $GLOBALS['nrw_pg'];

    }

    public function test_get_tweets(){

        $this->assertNotNull($this->nrw_pg->connect());
    }

}

私がwp-test-config.phpとここで言及された他の事とは別にセットアップする必要がある何か他にありますか: https://stackoverflow.com/questions/9138215/unit-testing-これを機能させるためのwordpress-plugins

特定のフィルタが追加された場合、他のものがテストのように機能しているようです。しかし、オプションは初期化されているようには見えません。何か案は?

2
Wern Ancheta

テスト用データベースは別のデータベースであるため(通常はそうであるべきです)、setUpルーチンで適切なオプション値を設定する必要があります(add_optionまたはupdate_optionを使用)。

破棄メソッドでもオプションを削除または再設定することをお勧めしますが、テーブルを削除しようとしたときに問題が発生しました( ユニットテストによるプラグインの開発 を参照)。

3
Brian Barnes