たとえば何らかのメールを送信する WordPress プラグインを開発する際に、WordPressの wp_mail()
で意図した通りのメールが送信されているかどうかを、ユニットテストで確認するには以下のように tests_retrieve_phpmailer_instance()
を使用する。
wp_mail()
の後に tests_retrieve_phpmailer_instance()
を実行するというのがなんだか謎だけど WordPress 本体でのユニットテストもそうなってるので間違いではないです。
class WP_Multibyte_Patch_Test extends WP_UnitTestCase
{
/**
* `wp_mail` should encode as expected
*/
public function test_wp_mail_should_be_sent_as_iso_2022_jp()
{
$to = 'hello@example.com';
$subject = "こんにちは";
$message = "日本語のメール";
wp_mail( $to, $subject, $message );
// テスト用のインスンタンスを作成
$mailer = tests_retrieve_phpmailer_instance();
// 送信先メールの確認
$this->assertSame( 'hello@example.com', $mailer->get_recipient( 'to' )->address );
// wp-multibyte-patchが有効化されている場合 ISO-2022-JP でエンコードされている
$this->assertSame(
"=?ISO-2022-JP?B?GyRCJDMkcyRLJEEkTxsoQg==?=",
$mailer->get_sent()->subject
);
$this->assertSame(
"こんにちは",
iconv_mime_decode( $mailer->get_sent()->subject, 0, 'UTF-8' )
);
$this->assertSame(
"日本語のメール\n",
mb_convert_encoding( $mailer->get_sent()->body, 'UTF-8', 'ISO-2022-JP' )
);
}
}