WordPressテーマやプラグインの自動テストを行う際、記事の追加をしたりページの移動をするためには、そのようなコードを書く必要があります
今回はテストコードでよく使うメソッドや、そもそもテストコードどうやって書くんだ?という点をまとめました
目次
テスト環境の準備
ユニットテストの環境準備は以下の記事を参考にして下さい
テストコードの書き方
まずはテストコードの書き方
一番簡単なのはWP-CLIを使って作ったサンプルのテストコードをコピーして作るのが楽です
サンプルコードはこんな感じ
/**
* Sample test case.
*/
class SampleTest extends WP_UnitTestCase {
/**
* A single example test.
*/
function test_sample() {
// Replace this with some actual testing code.
$this->assertTrue( true );
}
}
テストコードのファイル名、関数の書き方
実行するテストのコードが書かれたファイルはtest-xxxxx.php
のようなtest-
から始まる名前で作成します
テストコードはWP_UnitTestCase
を継承したクラスの中にtest
から始まる名前の関数を作るか、@test
アノテーションと呼ばれるコメントを記述することでテストメソッドとして認識されます
/**
* Sample test case.
*/
class SampleTest extends WP_UnitTestCase {
/**
* A single example test.
*/
function test_sample() {
// Replace this with some actual testing code.
$this->assertTrue( true );
}
/**
* @test
* A single example test2.
*/
function sample2() {
// Replace this with some actual testing code.
$this->assertTrue( true );
}
}
検証部分
テストとしての検証部分は$this->assertTrue( true );
と書かれている部分になります
assertTrue
のようなアサーションメソッドで期待値と実際の値が正しいかを検証します
アサーションメソッドについてはPHPUnitのドキュメントを参考にしてみて下さい
WordPressの自動テスト用コード書き方まとめ
それではここから、WordPressテーマやプラグインで使うことにあるであろうテストコードを徐々にメモしていきます
テスト用の投稿データを作成・更新する
/**
* 投稿追加
*/
function test_post_add() {
/**
* 投稿を追加して、追加した投稿IDを取得
*/
$post_id = $this->factory->post->create();
/**
* 追加した投稿の更新
*/
wp_update_post( array( 'ID' => $post_id, 'post_title' => '投稿が追加出来ました' ) );
/**
* 検証
*/
$this->assertEquals( '投稿が追加出来ました', get_the_title( $post_id ) );
}
$this->factory->post->create
で投稿を作成し、戻り値で投稿IDを取得できます
あとは投稿IDを使ってWordPressの各種関数を実行します
$this->factory->post->create
の引数でパラメータをしてしてもOKです
パラメーターについてはwp_insert_post
を参照
the_contentの出力結果をチェック
get_the_content
に投稿IDを指定できないので、expectOutputString
メソッドで期待値をセットした後にthe_content
を実行します
事前に投稿を作成しsetup_postdata
で現在の投稿をセットしておきます
/**
* the_contentの出力結果を確認
*/
function test_post_content() {
global $post;
$post_id = $this->factory->post->create( array( 'post_content' => 'コンテンツ' ) );
$post = get_post( $post_id );
setup_postdata( $post );
/**
* 検証
*/
$content2 = '<p>コンテンツ</p>' . PHP_EOL;
$this->expectOutputString( $content2 );
the_content();
}
expectOutputString
の引数に渡す期待値の末尾に改行が必要になります
URLへ移動
投稿ページ内だけ実行する関数などがあればgo_to
でURLへ移動
/**
* 特定のURLへ移動して検証
*/
function test_go_to() {
$post_id = $this->factory->post->create();
$this->go_to( get_the_permalink( $post_id ) );
/**
* 検証
*/
$this->assertTrue( is_single() );
$this->assertTrue( is_singular() );
$this->assertFalse( is_page() );
}
設定を更新する
設定の更新はupdate_option
を使います
/**
* 設定値を更新する
*/
function test_go_to() {
update_option( 'my_name', 'ワシじゃよ。オーキドじゃ' );
/**
* 検証
*/
$this->assertSame( 'ワシじゃよ。オーキドじゃ', get_option( 'my_name', '誰じゃ誰じゃ誰誰じゃ' ) );
}
ココらへんは普通にWordPressの関数でゴリゴリ変えられるっぽいのかな?
このページの目的
このページは「きっと後で自分が見直す」と思って書いているので、必要になったコードをメモとして随時足しています
徐々に内容が充実していく予定です。
最終更新日は先頭画像の下に書いてある日付をご参照下さい